%!PS (but not EPSF; comments have been disabled)
%DVIPSCommandLine: dvips -D600 -ta4 -o thesis-ch3.ps thesis-ch3.dvi
%DVIPSParameters: dpi=600, compressed, comments removed
%DVIPSSource:  TeX output 1995.09.19:1602
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale true def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
TeXDict begin 39158280 55380996 1000 600 600 (thesis-ch3.dvi)
@start /Fa 5 117 df<91383FC006903901FFF80E90390FE03E1E90381F0007017EEB03
BE01F8EB01FE484813004848147E0007153E485A001F151E5B003F150E90C8FC5A1606A2
12FE1600AA007F1506A37E6D140E001F150C7F000F151C6C6C1418000315386C6C14706C
6C14E0017EEB01C0011FEB078090390FE03E00903801FFF89038003FC0272D7BAB31>99
D<D8FFF0ED3FFC6D157F0007178000031700017C15DFA26DEC019FA36DEC031FA26D6C13
06A36D6C130CA26D6C1318A26D6C1330A36D6C1360A2027C13C0A391383E0180A291381F
0300A3EC0F86A2EC07CCA3EC03F8A2486C6C5AA2D81FE0ED3F803CFFFC00E007FFFCA236
2B7CAA3E>109 D<EC7FC0903803FFF890380FC07E90393F001F80017CEB07C04848EB03
F048486D7E4913004848147C000F157E484880A248C8EA1F80A24816C0A2007E150FA200
FE16E0AA007FED1FC0A36C16806D143F001F1600A26C6C147E6C6C5CA26C6C495A6C6C49
5AD8007CEB07C0013FEB1F8090260FC07EC7FC903803FFF89038007FC02B2D7BAB35>
111 D<B612E015FC3907F800FE6C48EB1F80ED0FC0ED07E016F01503A216F8A516F0A215
0716E0ED0FC0ED1F80EDFE0090B55A15E001F0C8FCB1487EB512C0A2252B7CAA2E>I<00
7FB712C0A23A7E003FC00F007890381F8003007015011600126000E016E0A2481660A5C7
1500B3A8EC7FE0011FB57EA22B2B7DAA31>116 D E /Fb 21 120
df<121C127FEAFF80A5EA7F00121C0909798817>46 D<EB0FF0EB7FFE48B57E3903E03F
E0390F000FF0000E6D7E486D7E486D7E123000706D7E126012FCB4EC7F807FA56CC7FC12
1CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A92C7FC147C5C495A495A495A495A
91C8FC011EEB01805B5B49130348481400485A485A000EC75A000FB6FC5A5A485CB6FCA3
21387CB72A>50 D<EB03F8EB1FFF017F13C09038FC07E03903F803F048486C7E48486C7E
49137E121F48487FA2007F158090C7FCA248EC1FC0A616E0A56C143FA27F123F001F147F
A26C6C13FF6C6C13DF000313013901F0039F3900FC0F1FD93FFC13C0EB07F090C7FC153F
1680A316005D000F147E487E486C5BA24A5A4A5A49485A6C48485A001C495A260F807FC7
FC3807FFFC000113F038003FC0233A7DB72A>57 D<B612C0A3C6EBC0006D5AB3B3AD497E
B612C0A31A397EB81E>73 D<EAFFF8A4EAF000B3B3B3B3A3EAFFF8A40D5378BD17>91
D<EAFFF8A4EA0078B3B3B3B3A3EAFFF8A40D537FBD17>93 D<EB1FE0EBFFFC3803E03F39
07000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EB
FE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980
063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F8007C026277DA52A>97
D<EB03FC90381FFF8090387E03E03901F80070484813F83907E001FC380FC003A2EA1F80
123F90380001F848EB00F01500A2127E12FEAA127E127FA26C14067F001F140E6D130C00
0F141C6C6C13386C6C13706C6C13E039007C07C090381FFF00EB07F81F277DA525>99
D<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0007F48
48133F4848131FA24848130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C131FA2
6C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F90381FFE0FD907F813C0283B
7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001F0D807E013F8380FC00048
48137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14037F00
1F14076C6C13060007140E6D131CD801F013386C6C137090387E03E090381FFF80903803
FC0020277EA525>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE039
03E007C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A
6D48C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF8048
15C03A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03
E0003F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA5
2A>103 D<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800F
C0EBF70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380
EA0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB7
17>I<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>108
D<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF380
0FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1F
E0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F80
3A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA4
2E>I<EB03FE90380FFF8090383E03E09038F800F84848137C48487F48487F4848EB0F80
001F15C090C712074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A2
6C6CEB0FC0000F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D9
03FEC7FC25277EA52A>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA03
E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>114
D<EBFF03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7F
E013FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303
A37E15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A5
1338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580
EB7C03017E13006D5AEB0FFEEB01F81A347FB220>I<B53A1FFFE03FFEA3260FF8009038
000FF86C48017EEB03E018C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2
017E9038EFC00C15C7A2D93F016D5A15830281EBF038D91F831430150102C3EBF8709026
0FC6001360A2D907E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100
141E4A130E0260130C37257EA33C>119 D E /Fc 1 50 df<13381378EA01F8121F12FE
12E01200B3AB487EB512F8A215267BA521>49 D E /Fd 2 89 df<BB12FC86A3D87FC0C9
001F7FF0007F6C6C17076C6C050113806C6CEF007F1A1F6C6CF00FC06C6C18076C6C1803
F201E06C6D17006D6C1860013F19706E18306D7E6D6C18181B006D7E6D7E6D7EA26D7F6E
7E6E7EA26E7E6E7E6E7EA26E7E6E7E80826F7E6F7EA26F7E6F7E6F5A5EA24B5A5E4BCBFC
153E157E5D5D4A5A4A5A14075D4A5A4ACCFC143E147E147C5C4948181801031930495A4A
18704948186049CC12E0491801017EF003C0017C180749180F4848F01F800003197F49EF
01FF4848050713004848173F48CA000FB5FC48BA5AA25ABB5AA24D537B7F58>80
D<BF12E08AA38A6C90CCFC0900806C6D19076C6D07007F6C6D1A1F1D076C6DF201FF6C6D
747E6C6DF33F801E0F6C6D1B076D6CF303C06D6D1A01F600E06D7F6D6D1B706D1D30816D
6D1B186D6D1B007F816E7E6E7FA26E7F6E7F6E7FA26E7F6E7F6E7FA26F7E6F7F6F7FA26F
7F6F7F81836F7F6F7F167F83707F707F8284707F707FA2707F82715A60173F715A604D5A
4DCDFC17FEA24C5A4C5A4C5A4C5A4C5A5F163F4CCEFC16FE4B5A4B5A4B5AA24B5A4B5A4B
5A4BCFFC15FEA24A5A4A5A4A481B184A481B304A5A4B1B70023F1C604ACF12E002FE1B01
4948F303C049481B074948F30F801E1F49481B7F4948F3FF0049481A0349CE120F01FEF3
7FFEF403FF48481A7F4848077FB55A48BEFC48655AA248655ABFFC666D747B7F78>88
D E /Fe 16 122 df<EB01FCEB0FFF90383F07C090387C03E03A01F801F00CEA03F03907
E000F84848141C49EBFC18001F147C48C713381630481570007E156016E016C000FE147D
48EC7F801600157EA2157CA2127C15FE0203130C6CEB073E6C011E131C3A0F81F81F383A
03FFE00FF03A00FE0003C0261F7D9D2D>11 D<90B6128012035A481500261E00E0C7FC5A
00705B130112E012C0EA0003A25CA21307A349C8FCA35BA2131E133EA45BA21338211E7E
9C1F>28 D<92387FC003913903FFF80791391FC03E0F91397E00071FD901F8EB03BF4948
EB01FED90FC013004948147E49C8FC017E157C49153C485A120348481538485AA2485A17
3048481500A2127F90CAFCA35A5AA5EE018016031700A2007E5D1606160E6C5D5E6C6C5C
000F5D6C6C495A6C6CEB0780D801F8011EC7FCD8007E13F890381FFFE0010390C8FC302F
7CAD32>67 D<000FB8FCA23B1FC003F8003F0100151F001C4A130E123C00380107140612
3000704A130EA20060010F140C12E0485CA2141FC715005DA2143FA292C8FCA25CA2147E
A214FEA25CA21301A25CA21303A25CA21307A25C130F131F001FB512F0A2302D7FAC29>
84 D<EB01F8EB0FFE90383E0780EB7C01D801F813C03803F0073807E00FEA0FC0018013
80121F48C8FCA25A127EA312FE5AA51560007C14E0EC01C0EC03806CEB0F00001E131C38
0F81F83807FFE0C648C7FC1B1F7D9D1F>99 D<1307EB0F80EB1FC0A2EB0F80EB070090C7
FCA9EA01E0EA07F8EA0E3CEA1C3E123812301270EA607EEAE07C12C013FC485A12001201
5B12035BA21207EBC04014C0120F13801381381F01801303EB0700EA0F06131EEA07F8EA
01F0122E7EAC18>105 D<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA212
0115F89038F003FCEC0F0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849C7FC
13CEEA0FDC13F8A2EBFF80381F9FE0EB83F0EB01F81300481404150C123EA2007E141C15
18007CEBF038ECF83000FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>107
D<137CEA0FFCA21200A213F8A21201A213F0A21203A213E0A21207A213C0A2120FA21380
A2121FA21300A25AA2123EA2127EA2127CA2EAFC08131812F8A21338133012F01370EAF8
60EA78E0EA3FC0EA0F000E2F7DAD15>I<3907C007E0391FE03FF83918F8783E393879E0
1E39307B801F38707F00126013FEEAE0FC12C05B00815C0001143E5BA20003147E157C5B
15FC0007ECF8081618EBC00115F0000F1538913803E0300180147016E0001F010113C015
E390C7EAFF00000E143E251F7E9D2B>110 D<EB01F8EB0FFF90383F078090387C03C0D8
01F813E03903F001F0EA07E0D80FC013F8EB8000121F48C7FC14015A127EA2140300FE14
F05AA2EC07E0A2EC0FC0A2007CEB1F801500143E6C5B6C485A380F83E03803FF80D800FC
C7FC1D1F7D9D22>I<3807C01F390FF07FC0391CF8E0E0383879C138307B8738707F07EA
607E13FC00E0EB03804848C7FCA2128112015BA21203A25BA21207A25BA2120FA25BA212
1FA290C8FC120E1B1F7E9D20>114 D<130E131FA25BA2133EA2137EA2137CA213FCA2B5
12F8A23801F800A25BA21203A25BA21207A25BA2120FA25BA2001F131014301300147014
6014E0381E01C0EB0380381F0700EA0F0EEA07FCEA01F0152B7EA919>116
D<D801E01370D807F813F8380E3C01D81C3E13FC1238003013000070147CEA607ED8E07C
133812C013FC485A0000143012015B1570000314605B15E015C01207EBC00115801403EC
070000031306EBE00E00015BEBF07838007FE0EB1F801E1F7E9D22>118
D<D801E01570D807F890381C01F8D80E3C133ED81C3E017E13FC0038147C003015000070
167CD8607E01FC1378D8E07C49133812C013FC3880F8010000163000015C13F002031470
0003166001E05BA217E00007010714C001C0EBC00117801603000316006D486C5A160E3A
01F01DF01C3A00F838F83890397FF07FF090390FC00FC02E1F7E9D33>I<013F137C9038
FFC1FF3A01C1E383803A0380F703C0390700F60F000E13FE4813FC12180038EC07000030
49C7FCA2EA200100005BA313035CA301075B5D14C000385CD87C0F130600FC140E011F13
0C011B131C39F03BE038D8707113F0393FE0FFC0260F803FC7FC221F7E9D28>I<EA01E0
D807F8130ED80E3C131FD81C3E133F0038143E12301270D8607E137ED8E07C137C12C013
FC484813FC000014F812015B1401000314F013E0A21403000714E013C0A2140715C00003
130FEBE01F143F3901F07F8038007FEFEB1F8FEB001F1500A2003E133EA2007E5B5C387C
01F0387003E0383007C0383C0F80D80FFEC7FCEA03F0202C7E9D23>I
E /Ff 4 51 df<B812C0A32A037A9137>0 D<130C131EA50060EB01800078130739FC0C
0FC0007FEB3F80393F8C7F003807CCF83801FFE038007F80011EC7FCEB7F803801FFE038
07CCF8383F8C7F397F0C3F8000FCEB0FC039781E078000601301000090C7FCA5130C1A1D
7C9E23>3 D<137813FE1201A3120313FCA3EA07F8A313F0A2EA0FE0A313C0121F1380A3
EA3F00A3123E127E127CA35AA35A0F227EA413>48 D<91B512C01307131FD97F80C7FC01
FCC8FCEA01F0EA03C0485A48C9FC120E121E5A123812781270A212F05AA3B712C0A300E0
C9FCA37E1270A212781238123C7E120E120F6C7E6C7EEA01F0EA00FCEB7F80011FB512C0
13071300222B7AA52F>50 D E /Fg 19 122 df<EA07F0487E487E487E487EB51280A76C
13006C5A6C5A6C5A6C5A1111769025>46 D<157815FC14031407141F14FF130F0007B5FC
B6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49
D<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F8
01037FD80FE06D7F48486D7F48488001F01680486C6E13C07F486C6E13E07FA27013F0A5
6C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B
4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC
02FEEC03E0495A495A495A495AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A
5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512FC0107ECFF80011F15E09026
3FF8077F9026FF800113FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D15
E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B
5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0030113F89238007FFE707E701380
7013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FC
A25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A
6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<171F
4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C8083047F80167E8304FE804C
7E03018116F8830303814C7E03078116E083030F814C7E031F81168083033F8293C77E4B
82157E8403FE824B800201835D840203834B800207835D844AB87EA24A83A3DA3F80C880
92C97E4A84A2027E8202FE844A82010185A24A820103854A82010785A24A82010F855C01
1F717FEBFFFCB600F8020FB712E0A55B547BD366>65 D<B812C0A5D8000701F8C7FCB3B3
B3B2B812C0A52A527CD132>73 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703
FE000113F0486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6
037FB5FC020FB6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B48
5B4890C7FC5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C0
03E1EBFFE06C9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8
FC3C387CB641>97 D<913803FFC0023F13FC49B6FC010715C04901817F903A3FFC007FF8
49486D7E49486D7E4849130F48496D7E48178048497F18C0488191C7FC4817E0A248815B
18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01F06E14037E6C6DEC07
E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE903A0FFFC03FF80103
90B55A010015C0021F49C7FC020113F034387CB63D>101 D<137F497E000313E0487FA2
487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B54
7BD325>105 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>108
D<D93FF0D91FFCEDFFE0B591B500C0010713FE030302F0011F6D7E030F6E017F8092271F
E07FFCD9FF037F922A3F001FFE01F8007F0003027C9126FF03E080C602F06DD90780137F
DAF1E0038FC77FDAF3C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3
ACB6D8F807B6D8C03FB512FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F003
0F8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502
FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B6
12C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F4849
6D7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3
003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE
011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<
903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9
FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A
0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FB
FE075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<
90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013
FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612
FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307
D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15
F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F0307
13F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC
7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB6
35>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FC
A426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEB
FFF86D6C5B021F5B020313802A4D7ECB34>I<B600F00107B5FCA5000101F8C8EA7FE06C
6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F13076D5E
6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E5C16C3A2
6EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A6F5A4036
7DB447>118 D<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F16
7C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B02
7F143E6F137E023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA2
6E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E48
6C137E486C137C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6C
B45A6C13F000035BC690CBFC404D7DB447>121 D E /Fh 9 107
df<007FB912E0BA12F0A26C18E03C04789A4D>0 D<19E0F003F0180FF03FE0F0FF809438
03FE00EF0FF8EF3FE0EFFF80DC03FEC7FCEE0FF8EE3FE0EEFF80DB03FEC8FCED1FF8ED7F
E0913801FF80DA07FEC9FCEC1FF0EC7FC04948CAFCEB07FCEB1FF0EB7FC04848CBFCEA07
FCEA1FF0EA7FC048CCFCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF
9038007FC0EC1FF0EC07FC913801FF809138007FE0ED1FF8ED07FE923800FF80EE3FE0EE
0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FE943800FF80F03FE0F00FF01803F000E019
00B0007FB912E0BA12F0A26C18E03C4E78BE4D>20 D<1AF0A3861A78A21A7C1A3CA21A3E
1A1E1A1F747EA2747E747E87747E747E1B7E87757EF30FE0F303F8007FBC12FEBE1280A2
6CF3FE00CEEA03F8F30FE0F31F8051C7FC1B7E63505A505A63505A505AA250C8FC1A1E1A
3E1A3CA21A7C1A78A21AF862A359347BB264>33 D<92B6FC02071580143F91B712000103
0180C8FCD907FCC9FCEB1FE0EB3F80017ECAFC5B485A485A485A5B485A121F90CBFC123E
A2123C127CA2127812F8A25AA2B9FC1880A2180000F0CBFCA27EA21278127CA2123C123E
A27E7F120F6C7E7F6C7E6C7E6C7E137E6D7EEB1FE0EB07FC6DB47E010090B6FC023F1580
140702001500313A78B542>50 D<1706170F171FA2173EA2177CA217F8A2EE01F0A2EE03
E0A2EE07C0A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FC
A2153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25CA2495AA2495A
A2495AA2495AA249C9FCA2133EA25BA25BA2485AA2485AA2485AA2485AA248CAFCA2123E
A25AA25AA25A1260305C72C600>54 D<4B7E4B7EA21507A25EECFF8F010313EF90260F80
FFC7FC90383E003F497F49804848804848497E5B0007EC3DF049133C000FEC7CF8A248C7
EA787C15F848157E15F0A2140148157F007E4A7E1403A215C0A200FE01071480A2158014
0FA21500A25CA2141E143EA2143CA2147CA21478A214F8A25C1301A2007E491400A21303
A2007F495B1307003F157E5CA2130F001F157C018FC712FCD80F9F5CA201DE130100075D
D803FE495AA26C48495A00004A5A017C49C7FC017E133E90387F80F89038FBFFE001F813
8049C9FC1201A25BA26C5A29557CCC32>59 D<ED0FE015FF913803FC00EC0FE0EC3FC04A
5A4AC7FC5C495AA2495AB3AD495AA2495A131F495A495A01FEC8FCEA07F8EAFFE0A2EA07
F8EA00FEEB7F806D7E6D7E130F6D7EA26D7EB3AD6D7EA26D7E806E7E6E7EEC0FE0EC03FC
913800FFE0150F236479CA32>102 D<12FEEAFFE0EA07F8EA00FEEB7F806D7E6D7E130F
6D7EA26D7EB3AD6D7EA26D7E806E7E6E7EEC0FE0EC03FC913800FFE0A2913803FC00EC0F
E0EC3FC04A5A4AC7FC5C495AA2495AB3AD495AA2495A131F495A495A01FEC8FCEA07F8EA
FFE048C9FC236479CA32>I<126012F0B3B3B3B3B3A81260046474CA1C>106
D E /Fi 12 117 df<B812FCA2D803F8C7EA7F000001157EB3B3A3486C14FFB5D8F03F13
FCA22E2D7DAC35>5 D<EC0380B3A4B812FCA3C7D80380C7FCB3A42E2F7CA737>43
D<EB3FC0EBFFF03803E07C48487E48487E497E001EEB0780A2003E14C0A248EB03E0A500
FC14F0B0007C14E0A3007E1307003E14C0A36CEB0F806C14006D5A3807C03E3803F0FC38
00FFF0EB3FC01C2D7DAB23>48 D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387F
FFFEA2172C7AAB23>I<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060
EB07E012F000FC14F07E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E14
7C5C495A495A495A495A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5
FC5A4814C0B6FCA21C2C7DAB23>I<EB3FC03801FFF03807C0FC380E007E487FEC1F8000
3F14C0A2EB800F1300A2000C131FC7FC1580A2EC3F00143E5C5CEB03F0EBFFC014F0EB00
FC143FEC1F8015C0140F15E0A2EC07F0A21238127C12FEA3EC0FE012F8006014C0007013
1F6C1480001EEB3F00380780FC3801FFF038007FC01C2D7DAB23>I<140EA2141E143EA2
147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA0180120313
001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFCA21E2D7EAC
23>I<007FB712F8B812FCA2CBFCADB812FCA26C16F82E137C9937>61
D<EB1FE0EB7FF83801F03E3803C00F3907800780390F0003C04814E0003EEB01F0A248EB
00F8A300FC14FCA9007C14F8A26CEB01F0A26CEB03E0A2390F8007C03907C00F803901F0
3E0038007FF8EB1FE01E207E9E23>111 D<380781F838FF87FEEB8E3FEA0F9CEA07B813
B0EBF01EEBE000A45BB0487EB5FCA2181E7E9D1C>114 D<3801FE183807FFB8381E01F8
EA3C00481378481338A21418A27E7EB41300EA7FF06CB4FC6C13C06C13F0000113F83800
1FFC130138C0007E143EA26C131EA27EA26C133CA26C137838FF01F038E3FFC000C01300
17207E9E1C>I<1360A413E0A312011203A21207121FB512F0A23803E000AF1418A71438
3801F03014703800F860EB3FE0EB0F80152A7FA81B>I E /Fj 39
122 df<ED0FFF4AB512C0020F14F0027F80903A01FFF803FC499038C000FE010FEB0003
4948497E49485B5C495A4C138001FF6E13005CA3705AEE01F893C8FCA74BB51280B9FCA5
C69038E00003B3B0007FD9FFC1B6FCA538467EC53E>12 D<EC01E01403EC0FC0EC1F80EC
3F00147E5C1301495A495A5C130F495A133F5C137F49C7FCA2485AA2485AA212075BA212
0F5BA2121FA25B123FA4485AA612FFA25BAE7FA2127FA66C7EA4121F7FA2120FA27F1207
A27F1203A26C7EA26C7EA26D7E133F80131F6D7E1307806D7E6D7E1300147E80EC1F80EC
0FC0EC03E014011B6476CA2C>40 D<12F07E127E7E6C7E6C7E6C7E7F6C7E6C7E12007F13
7F80133F806D7EA26D7EA26D7EA2801303A2801301A280A27F1580A4EC7FC0A615E0A214
3FAE147FA215C0A6ECFF80A415005BA25CA213035CA213075CA2495AA2495AA2495A5C13
7F91C7FC13FE5B1201485A485A5B485A485A48C8FC127E12F85A1B647ACA2C>I<EA07C0
EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F>46
D<EC3FF849B5FC010F14E0013F14F890397FF01FFC9039FFC007FE4890380001FF48486D
1380000716C049147F000F16E049143F001F16F0A2003F16F8A249141F007F16FCA600FF
16FEB3A3007F16FCA56C6CEC3FF8A3001F16F0A2000F16E06D147F000716C06D14FF6C6C
4913806C6D4813006C6D485A90397FF01FFC6DB55A010F14E0010314809026003FF8C7FC
2F427CC038>48 D<EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3ADB712FC
A5264177C038>I<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC0313FE3A0FE0
007FFFD81F806D138048C7000F13C0488001C015E001F07F00FF6E13F07F17F881A46C5A
6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7FC
4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D907E014F0495A495A49C8FC
017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<ECFFF0010713
FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D138013FE001F16
C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B020F1380902607FFFEC7FC
15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217F8A3EA0FC0
EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0491300D80F
FEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<163FA25E5E
5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E147C14F8
EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7FC123E5A
12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>I<0007150301E0143F01FF
EB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001C1B5FC01C7
14C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F6C4815E0C8
FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007EC74813C012
3E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F1480010F01
FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F13FC49B6FC01079038807F8090
390FFC001FD93FF014C04948137F4948EBFFE048495A5A1400485A120FA248486D13C0EE
7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF8000FF017F13E091B512F89039F9
F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F13E0A24915F0A317F85BA4127F
A5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913806C018014006C6D485A6C9038
E01FFC6DB55A011F5C010714C0010191C7FC9038003FF02D427BC038>I<121E121F13FC
90B712FEA45A17FC17F817F017E017C0A2481680007EC8EA3F00007C157E5E00785D1501
4B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14035D14074A5AA2141F5D143FA2
147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A2F447AC238>I<EC7FF00103B5
FC010F14C0013F14F090397F801FFC3A01FC0003FE48486D7E497F4848EC7F80163F4848
15C0A2001F151FA27FA27F7F01FE143F6D158002C0137F02F014006C01FC5B6E485A6C90
38FF83FCEDE7F86CECFFE06C5D6C92C7FC6D14C06D80010F14F882013F8090B7FC48013F
14802607FC0F14C0260FF80314E04848C6FC496D13F0003F141F48481307496D13F81500
00FF157F90C8123F161F160FA21607A36D15F0127F160F6D15E06C6C141F6DEC3FC06C6C
EC7F80D80FFE903801FF003A07FFC00FFE6C90B55AC615F0013F14C0010F91C7FC010013
F02D427BC038>I<EC7FF0903807FFFE011F6D7E017F14E09039FFE03FF0489038800FF8
48496C7E48488048486D7E001F80003F1680A2484815C08117E0A212FF17F0A617F8A45D
127FA3003F5CA26C7E5D6C6C5B12076C6C131E6CEBC07C6CEBFFF8013F5B010F01C013F0
0101130090C8FCA217E05DA2EA03C0D80FF015C0487E486C491380A217004B5A150F5E49
495A6C48495A01C0EBFFE0260FF0035B6CB65A6C4AC7FC6C14F86C6C13E0D907FEC8FC2D
427BC038>I<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791B539E0
01FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E4948814948814948167F4849
163F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C7FC12FFAE12
7F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17C06E16077E6C6DEE0F806C6DEE1F00
6D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F0010101FEEC1FE06D903AFFF001FF80
023F90B6C7FC020715FC020115F0DA001F1480030001F8C8FC44467AC451>67
D<B9FC18F018FE727E19E026003FFEC7001F13F805017F9438003FFF060F7F727F727F72
7F84737E737EA2737EA2737EA21B80A2851BC0A51BE0AD1BC0A51B8061A21B006162193F
624F5A19FF624E5B06075B4E5B063F90C7FC4DB45A050F13F8BA5A19C04EC8FC18F095C9
FC4B447CC356>I<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E193E
A3191EA21778A285A405F890C7FCA316011603161F92B5FCA5ED001F160316011600A2F1
01E01778A2F103C0A494C7FC1907A21A80A2190FA2191FA2193FF17F0061601807181F4D
B5FCBBFC61A443447DC34A>I<B712F0A526003FFECAFCB3B1F00780A4180F1900A460A3
60A2187EA218FE170117031707171F177FEE03FFB95AA539447CC343>76
D<B9FC18F018FE727E19E0D8001F90C7000F7F05017F716C7E727E727E721380A21AC084
A21AE0A91AC0A24E1380A21A00604E5A4E5A4D485A050F5B92B712C096C7FC18FC18C092
CBFCB3A7B712E0A543447DC34D>80 D<003FBA12E0A59026FE000FEB8003D87FE0933800
3FF049171F90C71607A2007E1803007C1801A300781800A400F819F8481978A5C81700B3
B3A20107B8FCA545437CC24E>84 D<903801FFE0011F13FE017F6D7E48B612E03A03FE00
7FF84848EB1FFC6D6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91
B6FC1307013F13F19038FFFC01000313E0000F1380381FFE00485A5B127F5B12FF5BA35D
A26D5B6C6C5B4B13F0D83FFE013EEBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB80
07D90FFCC9FC322F7DAD36>97 D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF
14F89139DFC03FFC9139FF000FFE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218
F8173FA318FCAC18F8A2177F18F0A3EFFFE06E15C06E5B6E491380027C491300496C495A
903AFC1FC07FFC496CB512F0D9F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC
49B512C0010F14F0013F14FC90397FF003FE9039FFC001FF0003495A48494813805B120F
485AA2485A6F1300007F6E5AED00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C14
07000F16806D140F6C6DEB1F006C6D133E6C01F05B3A007FFC03F86DB55A010F14C00103
91C7FC9038003FF82A2F7CAD32>I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC
010FEBFF8F013F14CF9039FFF807FF48EBC00148903880007F4890C7123F4848141F4914
0F121F485AA3127F5BA212FFAC127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91
B5FC6CD9C00314FC6C9038F01FEF6DB5128F011FEBFE0F010713F89026007FC0EBF80036
467CC43E>I<EC3FF80103B57E010F14E0013F8090397FF83FF89039FFC007FC48496C7E
48496C7E48486D1380485A001FED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FC
A401F0C9FCA5127FA27FA2123F17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F
806C01F0EB3F0090397FFE01FE011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD
33>I<EDFF80020F13E0027F13F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F813
3FEB7FF0A2ED0FFCEBFFE0ED03F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0
A527467DC522>I<EB7FC0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139
C7F03FFC9138CF801F9139DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA5
37457CC43E>104 D<137C48B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA
007C90C7FCAAEB7FC0EA7FFFA512037EB3AFB6FCA518467CC520>I<EB7FC0B5FCA51203
7EB3B3B3A3B61280A519457CC420>108 D<90277F8007FEEC0FFCB590263FFFC090387F
FF8092B5D8F001B512E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC00
03D99F009026FF3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3
A7B60081B60003B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E00281
14F8913987F03FFC91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3
A7B60083B512FEA5372D7CAC3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF
9026FFC0017F48496C7F4848C7EA3FE000078248486E7E49140F001F82A2003F82491407
007F82A400FF1780AA007F1700A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6C
EBFFE06C6D485B27007FF80F90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7D
AD38>I<90397FC00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE0003
01FCEB07FF6C496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F0
17FFA24C13E06E15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314
C002C091C7FCED1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313
F0028F13F8ED8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E0
92C7FCA35CB3A5B612E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F
381FF003383FC00049133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387F
FFF014FF6C14C015F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000
F0143FA26C141F150FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A
00FC5CD8F03F13E026E007FEC7FC232F7CAD2C>I<EB01E0A51303A41307A2130FA2131F
A2133F137F13FF1203000F90B51280B7FCA4C601E0C7FCB3A3ED01E0A9150302F013C013
7F150790393FF80F8090391FFC1F006DB5FC6D13FC01015B9038003FE023407EBE2C>I<
D97FC049B4FCB50103B5FCA50003EC000F6C81B3A85EA25EA25E7E6E491380017FD901F7
13FE9138F807E76DB512C7010F1407010313FE9026007FF0EBFC00372E7CAC3E>I<B500
FE90383FFFF0A5C601F0903803E0006D6C495A013F4A5A6D6C49C7FC6E5B6D6C137E6DEB
807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D6E7E6E7F6E7FA24A7F4A7F
8291381F3FFCEC3E1F027C7F4A6C7E49486C7F01036D7F49487E02C08049486C7F49C76C
7E013E6E7E017E141FB500E090B512FCA5362C7EAB3B>120 D<B6903803FFFCA5000101
E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5D
ED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F
5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14015D001F1303D83F80
5B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06CB45A6C5B000790CAFC
EA01FC36407EAB3B>I E /Fk 10 107 df<007FB812FEBAFCA26C17FE3804799847>0
D<180E183F18FFEF03FEEF0FF8EF3FE0EFFF80933803FE00EE1FF8EE7FE0923801FF80DB
07FEC7FCED1FF0ED7FC04A48C8FCEC07FCEC3FF0ECFFC0010390C9FCEB0FFCEB3FE0EBFF
80D803FECAFCEA0FF8EA3FE0EAFF8048CBFC6C7EEA7FE0EA0FF8EA03FEC66C7EEB3FE0EB
0FFCEB03FF010013C0EC3FF0EC07FCEC01FF9138007FC0ED1FF0ED07FE923801FF809238
007FE0EE1FF8EE03FE933800FF80EF3FE0EF0FF8EF03FEEF00FF183F180E1800AE007FB8
12FEBAFCA26C17FE384779B947>20 D<127012FCB4FCEA7FC0EA1FF0EA07FCEA01FF3800
7FC0EB1FF8EB07FE903801FF809038007FE0EC0FF8EC03FE913800FF80ED3FE0ED0FFCED
03FF030013C0EE3FF0EE07FCEE01FF9338007FC0EF1FF0EF07FCEF01FFEF007FEF01FFEF
07FEEF1FF0EF7FC0933801FF00EE07FCEE3FF0EEFFC0030390C7FCED0FFCED3FE0EDFF80
DA03FEC8FCEC0FF8EC7FE0903801FF80D907FEC9FCEB1FF8EB7FC04848CAFCEA07FCEA1F
F0EA7FC048CBFC12FC1270CCFCAE007FB812FEBAFCA26C17FE384779B947>I<0203B512
F8023F14FC91B6FC010315F8D90FFEC8FCEB1FE0EB7F8001FEC9FCEA01F8485A485A485A
5B48CAFCA2123EA25AA21278A212F8A25AA2B812F817FCA217F800F0CAFCA27EA21278A2
127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FE0EB0FFE0103B612F8010015
FC143F020314F82E3679B13D>50 D<1718173C177CA217F8A2EE01F0A2EE03E0A2EE07C0
160F1780EE1F00A2163EA25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FCA2153E157E15
7C5DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25C13015C495AA2495AA2495A
A249C9FCA2133EA25BA25BA2485AA2485AA2485A120F5B48CAFCA2123EA25AA25AA25A12
602E5474C000>54 D<1518153CA2157CA2903803FC7890380FFFF8EB3E0790387801F0EB
F0004848487ED803C07FD807807FA2390F0003EFA248ECCF80001EEB07C7003E15C01587
A2140F007E15E0007C1403A2141FA2141E00FC013E13F0A2143CA2147CA21478A214F8A2
14F01301A214E0A21303A214C0A21307A21480D87C0F14E0A21400007E14075BA2D83E1E
14C0A2133E001FEC0F80133CD80F7C1400A2495B0007141E00035C00015C4913F83900F8
01E03901FE07C090B5C7FCEBE3FCD803E0C8FCA25BA26C5A244D7CC52D>59
D<0060EE018000F0EE03C0B3B3A36C1607A200781780007C160FA26CEE1F00003F5E6C6C
157E6C6C5DD807F0EC03F8D803FCEC0FF06CB4EC3FE03B007FF003FF80011FB548C7FC01
0714F8010114E09026001FFEC8FC32397BB63D>91 D<153FEC03FFEC0FE0EC3F80EC7E00
495A5C495AA2495AB3AA130F5C131F495A91C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03
F8EA00FE133F806D7E130F801307B3AA6D7EA26D7E80EB007EEC3F80EC0FE0EC03FFEC00
3F205B7AC32D>102 D<12FCEAFFC0EA07F0EA01FCEA007E6D7E131F6D7EA26D7EB3AA80
1303806D7E1300147FEC1FC0EC07FEEC00FFEC07FEEC1FC0EC7F0014FC1301495A5C1307
5CB3AA495AA2495A133F017EC7FC485AEA07F0EAFFC000FCC8FC205B7AC32D>I<126012
F0B3B3B3B3B11260045B76C319>106 D E /Fl 27 121 df<9339FF8001C0030F13E003
3F9038F803809239FF807E07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4
FC4AC77E495AD903F86E5A495A130F4948157E4948157C495A13FF91C9FC484816781203
5B1207491670120FA2485A95C7FC485AA3127F5BA312FF5BA490CCFCA2170FA2170EA217
1E171C173C173817786C16706D15F04C5A003F5E6D1403001F4B5A6D4AC8FC000F151E6C
6C5C6C6C14F86C6C495A6C6CEB07C090397FC03F8090261FFFFEC9FC010713F001001380
3A4272BF41>67 D<49B648B6FC495DA2D9000390C7000313004B5D4B5DA2180714074B5D
A2180F140F4B5DA2181F141F4B5DA2183F143F4B5DA2187F147F4B5DA218FF91B8FC96C7
FCA292C712015B4A5DA2170313034A5DA2170713074A5DA2170F130F4A5DA2171F131F4A
5DA2173F133F4A5DA2017F157FA24A5D496C4A7EB66CB67EA3483E7BBD44>72
D<49B612C0A25FD9000390C8FC5D5DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA3
14FF92C9FCA35B5CA313035C18C0EF01E0010716C05C17031880130F4A140718005F131F
4A141EA2173E013F5D4A14FC1601017F4A5A16074A131F01FFECFFF0B8FCA25F333E7BBD
39>76 D<902601FFFE020FB5FC496D5CA2D900016D010013C04AEE3F00193E70141C193C
EC07BFDB3FE01438151F1978020F7FDA0E0F15708219F0EC1E07021C6D5CA20303140102
3C7FDA38015DA2701303EC7800027002805BA2047F130702F014C04A013F91C7FCA2715A
0101141F4AECF00EA2040F131E010315F84A151C1607EFFC3C0107140391C7143817FE04
0113784915FF010E16708218F0131E011C6F5AA2173F133C01385E171F137813F8486C6F
5AEA07FEB500F01407A295C8FC483E7BBD44>78 D<EEFFC0030713F892383F80FE9238FC
003FDA03F0EB0F804A486D7EDA1F80804AC76C7E027E6E7E4A8149481400494881130749
5A4948157F133F5C49C9FC4917805B1201485AA212075B000F17FFA25B121F190048485D
A448484B5AA34D5AA25B4D5A12FF60171F60007F163F604D5AA24DC7FC5F003F15014C5A
6D5D001F4B5A4C5A6C6C4A5A4C5A6C6C4AC8FC000315FC6C6C495A6C6CEB07E0017FEB1F
8090261FC07EC9FC903807FFF801001380394273BF46>I<49B612FCEFFF8018F0903B00
03FE000FF8EF03FE4BEB00FF8419800207ED3FC05DA219E0140F5DA3021FED7FC05DA2F0
FF80143F4B15004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7FC92380007F892B512
E01780499038000FE04A6D7E707E707E0103814A130083A213075CA25E130F5C5F160313
1F5CA3013F020714404A16E05F017F160119C04A01031303496C1680B6D8800113079438
FE0F009338007E1ECAEA3FFCEF07F03B407BBD42>82 D<92390FF001C0ED7FFE4AB5EA03
80913907F80FC791390FC003EF91391F8001FF4AC71300027E805C495A4948143EA2495A
A2010F153C5CA3011F1538A38094C7FC80A214FC6DB4FC15F015FE6DEBFFC06D14F06D14
FC6D80143F020F7F020180EC001F150303007F167F163FA2161FA212075A5F120EA2001E
153F94C7FCA2163E003E157E167C003F15FC4B5A486C5C4B5A6D495AD87DE0EB1F80D8F8
F849C8FC017F13FE39F03FFFF8D8E00F13E048C690C9FC32427ABF33>I<147E49B47E90
3907C1C38090391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F
5B001F5C157E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078
020F1370127C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A
03FF00FF00D800FC133E252977A72E>97 D<EC1FE0ECFFF8903803F03E903807C00F9038
1F8007D93F001380017E131F49137F485A485A000715005B000F147E484890C7FCA2485A
A3127F90C9FCA35A5AA6481403007E5C5D151E003E5C5D6C5CEC03E0390F800F802603E0
7EC7FC3801FFF838003FC0212977A72A>99 D<EE3F80ED1FFF1700A2ED007FA2167EA216
FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC0
90383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE
127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F000
7E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E2940
77BE2E>I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A1207
4848133E49133C121F4848137C15F8EC03F0397F000FE0ECFF80B5EAFC0014C048C8FCA4
5AA61506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FF
F038007F801F2976A72A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2
157EA21780EE0E004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F
5DA5141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F
5C12FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0EC0F
FC91383E0E1C9138FC077E903901F003FE1303903807E001D90FC013FCEB1F80A2EB3F00
4914F8137E01FE1303A2484814F0A2150712034914E0A2150F12074914C0A2151FA21680
5B153F1203ED7F006D5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8903807E0FC
90C7FC1401A25DA21403A25D001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B387C
03F0381FFFC0D803FEC8FC273B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25CA213
0FA25CA2131FA25CA2133FA291C8FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007
D9FFC013E014801400A2485A5BA25B0003140F16C05BA20007141F16805BA2000F143F16
005B5D001F147EEDFE074913FCA2003F0101130FEDF80E1300161E48ECF01CA2007E1538
A200FE1570020013E048EC7FC00038EC1F0028407ABE2E>I<1478EB01FCA21303A314F8
EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00
701380A2EAF03F140012005B137E13FE5BA212015BA212035B1438120713E0000F1378EB
C070A214F0EB80E0A2EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<EB01FC
13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCED03E049EB0F
F8ED3C3C017EEB707CEDE1FC9038FE01C1EC03839038FC0703140E0001011C13F8913838
00E0494813001460000313E0EBF9C0EBF78001FEC8FC1207EBFFE0EBE7F8EBE0FE000F13
7F6E7EEBC01F6E7E121F16701380A2003F15F0021F13E001001380A248148116C0007EEB
0F83168000FE14879138078F0048EB03FE0038EB00F826407ABE2A>107
D<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA21400A25BA2137EA213FE
A25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A
1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA3C70EA1FE0EA0780144079BE
17>I<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E
01F8001E011C90387C3800001C49D97E707F003C01F05C0038157F4A5C26783FC05C1270
4A91C7FC91C7127E00F003FE1301494A5CEA007EA20301140301FE5F495CA20303140700
0160495C180F03075D0003051F13E0494A1480A2030FEC3F810007F001C0495CA2031F91
383E0380120F494AEC0700A2033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E043
2979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07C1F83A0E1F0F00FC001E011C137C
001C49137E003C13F012385C38783FC012705C91C7FC00F015FE495CEA007EA2150101FE
5C5BA2150300015D5B15075E0003020F13704914C0A2031F13F00007ED80E05B1681EE01
C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007C7EA01F02C2979A733>I<EC1FC0
ECFFF8903803F07C90380FC01FEB1F8090393F000F80017E14C0491307484814E0485A12
075B000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F4815C05AA2ED3F80A2ED7F00A2
48147E007C5C007E13015D4A5A003E495A6C495A4A5A260F803EC7FC3807C0FC3801FFF0
38003F80242977A72E>I<903903E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07
C0013C137801389038E003E0EB783F017001C013F0ED80019038F07F0001E015F8147E16
03000113FEA2C75AA20101140717F05CA20103140F17E05CA20107EC1FC0A24A1480163F
010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9
FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D3A80A72E>I<D801F013
FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB380F001C1370003CEBE01F123814
C0D8783F14C00070903880070092C7FC91C8FC12F05BEA007EA313FE5BA312015BA31203
5BA312075BA3120F5BA3121F5B0007C9FC232979A726>114 D<EC7F80903801FFE09038
07C0F890381F003C013E131C013C131E017C133E49137E15FEA2000114FCA215706D1300
7FEBFFC014FC6C13FF15806D13C06D13E0010F13F01300140F14071403120C123F387F80
011403D8FF0013E0A300FCEB07C000F0EB0F8012700078EB1F006C133C381F01F83807FF
E0C690C7FC1F297AA725>I<EB01C0EB03F01307A25CA2130FA25CA2131FA25CA2133FA2
91C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA21201A25BA21203A25BA21207A2
5BA2120FA25BA2121F141C1380A2003F133C1438EB0078147014F05C495AEA1F03495A6C
48C7FCEA07FCEA01F0193A78B81E>I<137C48B4141C26038F80137EEA0707000E7F001E
15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F1303140000005D5B017E1307
A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F1683EE0380A2ED7F070001
02FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C90391FFC07F8903907F001F02A
2979A731>I<017CEB01C048B4EB07F038038F80EA0707000E01C013F8121E001C1403EA
3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712E012005B017E130116C013FE5B
1503000115805BA2ED07001203495B150EA25DA25D1578000114706D5B0000495A6D485A
D97E0FC7FCEB1FFEEB03F0252979A72A>I<903903F001F890390FFC07FE90393C1E0E0F
9026780F1C138001F0EBB83FD801E013F89039C007F07FEA0380000714E0D9000F140048
151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA30101143C
001E1538003F491378D87F811470018314F000FF5D9039077801C039FE0F7C033A7C0E3C
078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A>120
D E /Fm 31 120 df<EC07F8EC3FFF9138FC0F80903903F003E090270FC001F01370D91F
806D13F0017FC714E001FE804848147E000316014916C04848143F000FEE03805B001F16
07003F1700495D170E007F161E49151C173C5F00FF167090C813F05F5F5FA294C7FC7EA2
5E6C5D4B7F6C6C9039079F81C0ED0F1F6C6C90383C0F836C6C01F014803C01F80FC007C7
003B007FFF0003FED91FF0EB00F834297DA73A>11 D<EB01C0496C14E00107EC03F0A301
0F1407A24A14E0A2011F140FA24A14C0A2013F141FA291C71380A249143FA2017E1500A2
01FE5CA249147EA2000115FE17074914FCA215010003160F923803F80EA200070207131E
030F131C6D131F033C1338486C1370903AFF81E07C70903AC7FF803FE0903AC1FE000F80
D81FC0C9FCA25BA2123FA290CAFCA25AA2127EA212FEA25AA35A1270303C7EA737>22
D<020FB512FE027F14FF49B7FC1307011F15FE903A3FE03FE00090387F000F01FE6D7E48
48130348488048481301485A5B121F5B123F90C7FC5A127EA2150300FE5D5AA24B5AA215
0F5E4B5AA2007C4AC7FC157E157C6C5C001E495A001FEB07E0390F800F802603E07EC8FC
3800FFF8EB3FC030287DA634>27 D<011FB612C090B7FC5A5A481680260FC007C8FC48C6
5A123E003C130E48131E5A5AA2C75AA3147CA2147814F8A4495AA31303A25CA21307A349
5AA3131FA25C6DC9FC2A287DA628>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A79
8919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A31201138012
0313005A120E5A1218123812300B1C798919>I<1806181F187FEF01FFEF07FCEF1FF0EF
7FC0933801FF00EE07FCEE3FF0EEFFC0030390C7FCED0FFCED3FE0EDFF80DA03FEC8FCEC
0FF8EC7FE0903801FF80D907FEC9FCEB1FF8EB7FC04848CAFCEA07FCEA1FF0EA7FC048CB
FCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF8EB07FE903801FF809038007FE0EC0F
F8EC03FE913800FF80ED3FE0ED0FFCED03FF030013C0EE3FF0EE07FCEE01FF9338007FC0
EF1FF0EF07FCEF01FFEF007F181F1806383679B147>I<126012F812FE6C7EEA3FE0EA0F
F8EA03FEC66C7EEB3FE0EB0FFCEB03FF010013C0EC3FF0EC07FCEC01FF9138007FC0ED1F
F0ED07FE923801FF809238007FE0EE1FF8EE03FE933800FF80EF3FE0EF0FF8EF03FEEF00
FFA2EF03FEEF0FF8EF3FE0EFFF80933803FE00EE1FF8EE7FE0923801FF80DB07FEC7FCED
1FF0ED7FC04A48C8FCEC07FCEC3FF0ECFFC0010390C9FCEB0FFCEB3FE0EBFF80D803FECA
FCEA0FF8EA3FE0EAFF8048CBFC12F81260383679B147>62 D<DC1FF81307923801FFFE03
0F9038FF800E923A7FF007E01E4A48C7EAF03EDA03FCEC787EDA0FF0EC3CFCDA3FC0141F
4A48140F4AC8FC4948ED07F8EB07F849481503131F4A16F049481501495A13FF4890C913
E05B1203485A19C0485AA2485A95C7FC123F5BA2127F5BA312FF5BA590CCFC183CA21838
A21878187018F06C6C5E17014D5A003F5F6D15074DC7FC001F161E6C6C5D6D5D6C6C5D00
034B5AD801FEEC07C06C6C4AC8FCD97FC0137E90391FF803F80107B512E0010114809026
001FF8C9FC40427BBF41>67 D<49B912C0A3D9000190C71201F0003F4B151F190F1A8002
0316075DA314075D1A00A2140F4BEB0380A205075B021FED000E4B92C7FC5FA2023F141E
5D173EEE01FE4AB55AA3ED800102FF6D5A92C71278A34915705C191C05F0133C01034B13
384A167894C71270A2010717F04A5E180161010F16034A4B5AA2180F011F4CC7FC4A5D18
7E013F16FE4D5A4A140F017F15FFB95AA260423E7DBD43>69 D<49B9FCA3D9000190C712
0718004B157F193F191E14035DA314075D191CA2140F5D17074D133C021F020E13384B15
00A2171E023F141C4B133C177C17FC027FEB03F892B5FCA39139FF8003F0ED00011600A2
495D5CA2160101035D5CA293C9FC13075CA3130F5CA3131F5CA2133FA25C497EB612F8A3
403E7DBD3A>I<49B612C05BA2D90001EB800093C7FC5DA314035DA314075DA3140F5DA3
141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA313035CA313075CA3130F5CA3131F5C
A2133FA25CEBFFE0B612E0A32A3E7DBD28>73 D<EE3FF00303B5FC92391FC03FC092397E
0007E0DA01F8EB01F8DA07E06D7E4A48147E023FC87E027EED1F804A16C0D903F8150F49
4816E0495A4948ED07F0A2494816F849C9FC5B48481603A2484817FCA2485A000F17075B
121FA25B123F19F84848160FA44848EE1FF0A3F03FE0A390CAEA7FC0A2F0FF80A219004D
5A1703604D5A6C7E4D5A4D5A003F5F4D5A6C6C4BC7FC17FE6C6C4A5A4C5A6C6CEC07E06C
6CEC1FC06C6C4A5A6C6C02FEC8FC90393F8003F890390FE01FE00103B5C9FC9038007FF0
3E427BBF45>79 D<007FB500F090387FFFFE19FC5D26007FE0C7000313804A913800FC00
4A5D187001FF16F0A291C95AA2481601605BA200031603605BA20007160795C7FC5BA200
0F5E170E5BA2001F161E171C5BA2003F163C17385BA2007F1678A2491570A200FF16F0A2
90C95AA216015F5A16035F16074CC8FC160E161E5E007F5D5E6C4A5A6D495A6C6C495A6C
6C011FC9FC6C6C137E3903FC03F8C6B512E0013F1380D907FCCAFC3F407ABD3E>85
D<B6020FB5FCA219FE000301C0020013E06C90C9EA7F00183E183C6C5F187060A24D5A17
036E5D4DC7FC017F5D170E5FA25F17786E14705F133F4C5A4C5AA24CC8FC5E6E130E5EA2
011F5C167816705E15015E6E485AA2010F49C9FC5D150E5DA25D6E5AA201075B14F95DEC
FB80A202FFCAFC5CA25C13035C5CA25CA25C40407BBD35>I<027FB5D88007B512C091B6
FCA2020101F8C7EBF8009126007FE0EC7F804C92C7FC033F157C701478616F6C495A4E5A
6F6C495A4EC8FC180E6F6C5B606F6C5B6017016F6C485A4D5A6F018FC9FC179E17BCEE7F
F85F705AA3707EA283163F167FEEF7FCED01E7EEC3FEED0383ED070392380E01FF151E4B
6C7F5D5D4A486D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A6E7E14F0495A49486E7E1307
D91F806E7ED97FC014072603FFE0EC1FFF007F01FC49B512FEB55CA24A3E7EBD4B>88
D<027FB712F0A3DAFFFCC7EA3FE003E0EC7FC092C8EAFF8049484A13004A4A5A5C4A4A5A
49484A5A4A4A5A4D5A49484A5A4D5A91C74890C7FC5B010E4A5A4C5A4C5A011E4A5A90C8
485A4C5A4C5A4B90C8FCA24B5A4B5A4B5A4B5A4B5A4B5A4B5AA24A90C9FC4A5A4A5A4A5A
4A4814704A4814F04A485C14FF5D4990C7120149485D49481403495A49485D4948140749
5A4DC7FC49485C4890C8FC48485D4848157E484815FE484814034848EC0FFC16FF48B7FC
B8FC5F3C3E7BBD3E>90 D<EC1F80ECFFE0903903F0707090390FC039F890381F801D9038
3F000F017E5C5B00011407485A48485CA2485A001F140F5E485AA2151F007F5D5BA2153F
00FF92C7FC90C7FCA25D92387E03805AA215FEEDFC07007E0101140014035E6C0107130E
140E3A1F801C7C1C000F13783A07C1F03E383A01FFC01FF03A007F0007C029297DA730>
97 D<EB1FC0EA0FFF5CA2EA003FA291C8FCA25BA2137EA213FEA25BA21201A25BA21203
A25BEC3F800007EBFFE09038F3C1F849C67E01FE137E4848133E49133F5B491480001F14
1F5B5BED3FC0123FA290C7FCA248147F1680127EA215FF00FE15005AA24A5AA25D140348
5C1407007C5C4A5A5D003C495A003E49C7FC001E137E6C13F8380783F03803FFC0C648C8
FC22407CBE27>I<EC07F0EC7FFE903801FC0F903907E0038090390FC001C0D93F8013E0
90387F000701FE131F485A485A16C0485A000F15804990C7FC121F485AA3127F5BA312FF
90C9FCA6007E1560007F15E01501ED03C06CEC07806DEB0F00001F141E6C6C137C3907E0
01F03901F01FC06CB5C7FCEB1FF023297DA727>I<EE07F0ED03FF17E0A2ED000FA217C0
A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80ECFFE1903803F07190390F
C039F890381F801D90383F000F137E495C00011407485A485A5E485A001F140FA248485C
A2151F127F495CA2153F12FF90C790C7FCA25DEE038048147EA215FE1607007ED901FC13
0014035E6C0107130E140E3A1F801C7C1C000F13783A07C1F03E383A01FFC01FF03A007F
0007C02C407DBE2F>I<EC1FE0ECFFFC903803F01E90380FC00F90393F800780D97E0013
C0491303EA03F8120749130748481480121F49130F003FEC1F00153E397F8001FCEC1FF0
B6128002F8C7FC90C9FCA45AA616C01501007E1403ED07806CEC0F00151E6C5C6C6C13F8
3907C003E03903E03F802600FFFEC7FCEB3FE022297CA72A>I<163EEEFFC0923803E1E0
923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA514015DA301
03B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C147EA414
FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703EEA7878
EA1FF0EA07C02C537CBF2D>I<EC01F8EC0FFE91383F07879139FC03DF80903801F80190
3903F000FFEB0FE04948EB7F005C133F49C7FC49147E5B000115FEA248485CA215011207
495CA21503120F495CA21507A25E5B0007140FA24B5A6D133F0003147F000114FF6D485B
0000EB03DF90387E0F3FEB1FFCD907F090C7FC90C7FC5DA2157EA215FEA25D001C130100
7F5C4813035D4A5A4A5A48495A00F8017EC8FC387E01FC381FFFE0000390C9FC293B7FA7
2B>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C9FC
15FE90397F07FFC091381F03E090397E3801F09138F000F8EBFFE04A7F5C91C7FC485AA2
5BA2484813015E5BA2000714035E5B1507120F5E49130F5E121F031F1370491480A2003F
023F13F0EE00E090C7FC160148023E13C01603007E1680EE070000FE5DED1F1E48EC0FF8
0038EC03E02C407CBE34>I<143C14FEA21301A314FCEB00701400AD137E3801FF803803
C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F14801200133F14
005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC03814781470
14E013C13803E3C03801FF00EA007C173E7EBC1F>I<ED01C0ED07F0A2150FA316E0ED03
8092C7FCADEC03E0EC0FF8EC3C3EEC701EECE01FEB01C001031480EB0780140049133F01
0E1400131E131C013C5BA290C7127EA215FEA25DA21401A25DA21403A25DA21407A25DA2
140FA25DA2141FA25DA2143FA292C7FCA25C147EA2001C13FE007F5BEAFF015C495A495A
48485A38F81F80D8783EC8FCEA3FF8EA0FE0245081BC25>I<D801F0EB0FF0D807FCEB3F
FED80F1FEBF01F000E903903C00F80271E0F87007F001C018E1307003C01DC80003813F8
5CEA781F00705B5CA200F049130F013F5D000090C7FCA2161F495D137E163F94C7FC13FE
495C167EA200019238FE03804914FCA203011307000303F813005B5FEEF00E0007161E49
151C5F1778000F6E6C5A49EC7FC0D80380021FC7FC31297EA737>110
D<EC1FC0ECFFF8903803E03C903807800E90381E0007168049130F49131F153FA201F814
00A2151C6D90C7FC7FEBFFE014FE90387FFFC06D7F6D13F86D7F13039038001FFE140314
00157E000C143E123F487EA248C7123CA25D12FC00F05C0070495A0078495A6C495A260F
803EC7FC3803FFF838007FC021297CA72B>115 D<017E147848B4EB01FC2603C7C013FE
D807031303000F13E0120E121C0107130100381400167ED8780F143E00705B161EEAF01F
4A131C1200133F91C7123C16385B137E167801FE14705B16F016E0120149EB01C0A2ED03
80A2ED0700A20000140E5D6D133C017C5B6D5B90381F03C0903807FF80D901FCC7FC2729
7EA72C>118 D<017CEE038048B40207EB0FE02603C7C090391F801FF0EA0703000F7F00
0E153F001C16000107160F003817074C1303D8780F027E130100705B1800D8F01F14FE4A
4914E01200133FDA000114014C14C05B137E0303140301FE4A14805BA2F0070000011407
494A5B180EA260A2030F5C12006D011F5C017C496C5B017E0139495A6D903870F8039028
1F81E07C0FC7FC903A07FFC01FFE010090380007F03C297EA741>I
E /Fn 23 123 df<14E013011303130F137FEA07FFB5FC138FEAF80F1200B3B3ACEB3FF8
B612FEA31F3D77BC32>49 D<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F
0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC12
0CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C
5C495A495A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A
4815C0B7FCA3243D7ABC32>I<EC01E0A24A7EA34A7EA34A7EA24A7E141CA2EC3CFFEC38
7FA24A6C7EA34A6C7EA2010180ECC00FA249486C7EA349486C7EA24980010E1301010FB5
FC4980A2011CC7FC49147FA20178810170143FA201F08149141F1201486C811207486CEC
3FF8D8FFFE49B512C0A332317DB038>97 D<B612FEEDFFC016F03A03FC0007F86C48EB01
FE1500167F1780163F17C0A61780167F170016FE4B5AED07F0ED7FE090B6128016F09039
F80001FC6F7EEE7F80163FEE1FC017E0160F17F0A617E0161FA2EE3FC0EE7F80923801FF
00486CEB07FEB712F85E93C7FC2C2F7CAE35>I<DA0FF81330DA7FFF13700103B5EAC0F0
90390FFC03F190391FE000F9D97F80133F01FEC7121F4848140F48481407485A000F1503
491401121F491400123F5B127F1770A248C9FC1700AA6C6C1570A3123F6D15F0121F6D15
E0000F15016D15C0000715036C6C15806C6C14076C6CEC0F00D97F80133ED91FE05B9039
0FFC03F00103B55AD9007F1380DA0FF8C7FC2C317BAF36>I<B612FEEDFFE016F83A03FE
0007FC6C48EB00FFEE3F80707E707E707E707E160183160083A2177FA41880AA1800A317
FEA34C5A5F16034C5A5FEE1FC04C5A04FFC7FC486CEB07FEB712F816E093C8FC312F7DAE
39>I<B81280A3D803FEC7FC6C48EC1FC0160F16071603A21601A317E0ED0E00A31700A2
151E153E157E90B512FEA39038FC007E153E151E150EA21738A392C71270A417F0A2EE01
E0A216031607161F486C14FFB812C0A32D2F7DAE33>I<B8FCA33903FE00016C48903800
3F80161F160F1607A21603A317C01601150EA293C7FCA3151E153E157E90B512FEA39038
FC007E153E151E150EA592C8FCAA487EB512FCA32A2F7DAE31>I<DA0FF81360DAFFFE13
E00103EBFF8190390FF807E390393FC000F34948137F01FEC7123F4848141F4848140F48
481407120F491403485A003F1501A25B007F1500A348C9FC1700A8031FB5FCA26C7E9238
001FF0EE0FE0123F7FA26C7E120F7F12076C7E6C7E6C6C141FD97F80133FD93FE0137B90
390FFC03F10103B512E00100EC8060DA0FFCC7FC30317BAF3A>I<B5D8F807B512C0A3D8
03FEC7381FF0006C486E5AB190B7FCA301FCC7120FB3486C4A7EB5D8F807B512C0A3322F
7DAE38>I<B512F8A33803FE006C5AB3B3A3487EB512F8A3152F7DAE1B>I<B500F890381F
FFC0A3D803FEC7380FFE006C4815F017C04C5A041EC7FC5E16F84B5A4B5A4B5A4B5A4BC8
FC153C5D5DEC03E04A7E4A7E141F4A7EEC7DFEECF0FFEBFDE09039FFC07F804A6C7E4A6C
7E5B496D7E6F7E6F7EA26F7E6F7EA2707E707E707EA2707E83486CEC1FFEB500F890387F
FFE0A3332F7DAE3A>107 D<B512FCA3D803FEC8FC6C5AB3A71607A4160EA4161EA2163E
167E16FEED03FC486C130FB7FCA3282F7DAE2F>I<D8FFFE923807FFF0A3D803FF92380F
FC006C5FD9DF80141DA3D9CFC01439A2D9C7E01471A3D9C3F014E1A2D9C1F8EB01C1A3D9
C0FCEB0381A2027EEB0701A36E130EA291381F801CA391380FC038A2913807E070A39138
03F0E0A3913801F9C0A2913800FF80A3486CEB7F00487E486C013E497EB5008091B512F0
A2151C3C2F7CAE44>I<D8FFFC91387FFFC07F7F0001923807FC006E6D5A6E6D5AD9DFE0
6D5AA2EBCFF0EBC7F8EBC3FCA2EBC1FEEBC0FF6E7EA26E7E6E7EA26E7E6E7E6E7EA26E7E
6E7EED7F80A2ED3FC0ED1FE0ED0FF0A2ED07F8ED03FCA2ED01FEED00FF167FA2163F161F
160F487E486C1407486C1403B56C1301A21600322F7DAE38>I<EC1FF891B5FC903907F0
0FE090390FC003F0013FC712FC017E147E49804848EC1F804848EC0FC04848EC07E0000F
16F0491403001F16F8491401003F16FCA2007F16FE90C9FCA34816FFAA6C6CEC01FEA300
3F16FCA26D1403001F16F86C6CEC07F0A26C6CEC0FE0000316C06C6CEC1F806C6CEC3F00
017E147E6D5C90390FC003F0903907F00FE00100B5C7FCEC1FF830317BAF3A>I<B612FE
EDFFC016F03A03FE0007FC6C48EB01FEED007FEE3F80A2EE1FC0A217E0A617C0A2EE3F80
A2EE7F00ED01FCED07F890B612E0168001FCC9FCB2487EB512F8A32B2F7DAE33>I<B612
F015FF16C03A03FE001FF06C48EB03FCED00FE167FA283163F83A55F167F94C7FC16FE4B
5A4B5AED1FE090B6C8FC5D9039FC003F80ED0FC06F7E826F7EA26F7EA582A418E082A281
486CED01C0B500F8EB7F8193381FC38093380FFF00C9EA01FC33307DAE37>114
D<90383FC00C9038FFF81C0003EBFE3C390FE03FFC381F8007EB0003003E130148130015
7C5A153CA36C141CA27E6C14006C7E13E013FE383FFFE06C13FE6CEBFF806C14E0000114
F06C6C13F8010F13FC1300EC07FE14011400157F153F12E0151FA37EA2151E6C143E6C14
3C6C147C6C14F89038C001F039FBF807E000F1B512C0D8E07F130038C007FC20317BAF2A
>I<007FB712F8A39039801FF0073A7E000FE00000781678A20070163800F0163CA34816
1CA5C71500B3A8EC3FF8011FB512F0A32E2E7CAD36>I<B500F890387FFFC0A3D803FEC7
3807FC006C486E5A705A705AB3AB000015016D5D1603017E5D017F14076D6C49C7FC131F
6D6C133ED907F05B903903FC03F00100B55A023F1380DA07FCC8FC32307DAE38>I<B500
E0903807FFF0A3000790C7000113806C48913800FE000001167C0000167817706D15F06D
5DA26D6C495AA26E1303011F5DA26D6C49C7FCA26E5B0107140EA26D6C5BA26E133C0101
14388001005CA26E13F06E5B1581023F5BA215C3021F5B15E7020F90C8FCA2EC07FEA36E
5AA26E5AA36E5AA234307EAE38>I<003FB612F0A39039F8001FE013C090C7EA3FC0003E
EC7F80123C007CECFF000078495AA24A5A0070495AA24A5A4A5AC7FC4A5A4A5AA24AC7FC
495AA2495A495AA2495A495A1670495A495AA249C7FC485A16F0485A485A16E048481301
48481303A2484813074848131F15FFB7FCA3242F7BAE2E>122 D
E /Fo 18 120 df<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3FF0
486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E000
0F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE39
1FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97
D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8
02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E
495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113
C033407DBE3A>I<EC7FF00107B5FC011F14C0017F14E09039FFF01FF0489038800FF848
EB001F4848EB3FFC120F485AA2485AA2007FEC1FF849EB0FF0ED03C000FF91C7FCAB127F
7FA3003F153E7F001F157E6C6C147C6C6C14FC91388001F86C9038C003F0C69038F81FE0
6DB512C0011F14800107EBFE009038007FF0272B7DA92E>I<EE07F8ED07FFA5ED003F16
1FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01FFF48EBC00348EB00014848EB
007F485A001F153F5B123FA2127F5BA212FFAA127FA37F123FA26C6C147F120F6D14FF6C
6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F010713FC010001E0EBE00033407D
BE3A>I<ECFFF0010713FE011F6D7E017F809039FFE07FE0489038801FF048496C7E4848
6D7E48486D7E121F491301003F81A2485A6F1380A212FFA290B7FCA401F0C9FCA5127FA2
7F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038E001FC6C9038F80FF8013FB5
5A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE91387FFF8049B512C0010714
E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A2489038003FF0ED1FE0ED0FC0
92C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A525407DBF20>I<903A03FF8007F0
013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED
F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5
C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C
16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C
EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8
013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E
4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C
BE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A6C5AC8FCA913FFB5FCA51207
7EB3ABB512F8A515407CBF1D>I<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>108
D<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5C
A25CA35CB3A4B5D8FE0FB512E0A533297CA83A>110 D<EC7FF0903803FFFE011FEBFFC0
017F14F09039FFE03FF8489038800FFC3A03FE0003FE48486D7E000F168048486D13C0A2
003F16E049147F007F16F0A400FF16F8AA007F16F0A46C6CECFFE0A2001F16C06C6C4913
80A26C6C4913003A03FF800FFE6C9038E03FFC6C6CB512F0011F14C0010791C7FC903800
7FF02D2B7DA934>I<01FFEBFFE0B5000713FC021FEBFF80027F80DAFF8113F09139FC00
7FF8000301F06D7E4A6D7E4A130F4A6D7E1880A27013C0A38218E0AA4C13C0A318805E18
005E6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC028713FC028113C002
80C9FCACB512FEA5333B7DA83A>I<3901FE01FE00FF903807FF804A13E04A13F0EC3F1F
91387C3FF8000713F8000313F0EBFFE0A29138C01FF0ED0FE091388007C092C7FCA391C8
FCB3A2B6FCA525297DA82B>114 D<90383FFC1E48B512BE000714FE5A381FF00F383F80
0148C7FC007E147EA200FE143EA27E7F6D90C7FC13F8EBFFE06C13FF15C06C14F06C806C
806C806C80C61580131F1300020713C014000078147F00F8143F151F7EA27E16806C143F
6D140001E013FF9038F803FE90B55A15F0D8F87F13C026E00FFEC7FC222B7DA929>I<EB
07C0A5130FA4131FA3133F137FA213FF5A1207001FEBFFFEB6FCA40001EBC000B3151FA9
6CEBE03EA2017F137EECF8FC90383FFFF86D13F0010713E001001380203B7EB929>I<D9
FF80EB0FF8B5EB0FFFA50007EC007F6C153FB3A5167FA316FF6C5C4B7F6C903AC007DFFF
E09138F01F9F6DB5121F6D13FE010F13F8010101E0EBE000332A7CA83A>I<B53CFC3FFF
FC03FFFEA50003D980009039C0000F806E161F6C037F15006E496C5B6C183E836E48157E
017F177C6E486D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEBFE03010F02835C
17FFDAFF1F14076D02015C03BF148F6DD9BE005C18CF03FE14DF6D49017F90C7FC18FF6D
496D5AA36E486D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>119
D E /Fp 63 124 df<BA12F8A300010180C7380FFC00D8007F16F0B3B3B22601FFE0EC3F
FCB6D8C01FB512F8A33D3E7DBD44>5 D<EC0FC0EC3FF0ECF878903801F01CEB03E04948
7E130FEC800F011F7FA2EB3F00A5EC800EA25DA25DA25D6D6C5AECC1C0A2ECC38002E7C7
387FFFFCEB0FEE14FC4A020713C06D48913801FE006E5DEF00F06D7E4D5A496C5D010F15
03D91DFF4A5A013893C7FC496C6C5B01E0150E48486C6C131E00036E131C2607801F143C
000F6E5B001F6D6C1370263F000714F06F485A48D903FE5B913801FF03486D495A0487C8
FCED7FCFED3FFE6F4814386D6D5AA2007F6E6C14786D6D6C14704B6C14F06C6C496C6C13
E0001F91393E3FC0016C6C903AFC1FF003C03D07FC07F007FC1F800001B5D8C001B51200
6C6C90C7EA7FFCD90FF8EC0FF03E437CC047>38 D<121EEA7F8012FF13C0A213E0A3127F
EA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C79BE19>I<
1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485AA2
120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F12
0FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E01470
1430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27F
A2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2
131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A14
5A7BC323>I<EB03C0A2805CA600F0140F00FC143F00FE147F00FF14FF393FC3C3FC390F
E187F03903F18FC03900FDBF00EB3FFCEB0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18FC0
390FE187F0393FC3C3FC39FF03C0FF00FE147F00FC143F00F0140F00001400A6805CA220
277AC32D>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C3C7B
B447>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113801203
13005A120E5A1218123812300B1C798919>I<B512FEA617067F961E>I<121EEA7F80A2EA
FFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A21680150FA216005DA215
1E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E
143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E
133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2
123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F03F090387C
00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0A290C71203
4815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F8000
0315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7DBC2D>I<EB
01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC
2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E001C
1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0
157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A
49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7C
BC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F000E6D7E00
1E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5DEC
07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216E0
153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E6C4913006C
495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E15
3EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB0380
EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EA
FE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15
C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E4913
7E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090C712
1F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80F
E0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F90
391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F00001F91C7
FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC01B0137E13
F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C1480
A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903FCC7FC243F
7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED0780
16005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C1478
14F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<EB
03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FCED0F80121E
16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038FF80786C6D
5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E3903E01FFF
48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC0FF0150748
1403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C133ED807F0
5B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF90387E07
C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F15805B007F15C0
A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13DF00031301
3900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD80F80140048
7E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC3803FFFE6C13
F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F
80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E
00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206120E
120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA
12F0A26C18E03C167BA147>61 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801
C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA3
49486D7E91B6FCA249819138800001A249C87EA24982010E157FA2011E82011C153FA201
3C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC0
44>65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE707E701380EF7FC0EF3F
E0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF804C1300EE03FCEE0FF8
EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3FE0EF1FF018F8170F18
FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403138048486C90380FFE
00B85A17E094C7FC373E7DBD40>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80
EC0FF0B3A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44
>72 D<B612F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<B612F8A300
0101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F5F4C5A160748486C133F
B8FCA3313E7DBD39>76 D<B500C093383FFFF0A300016D93387FF800D8007F18E0D977F0
16EFA3D973F8ED01CFA2D971FCED038FA3D970FEED070FA26E150E80A26E6C141CA36E6C
1438A26E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A2037F130EA3
6F6C5AA26F6C5AA36F6C5AA25FED07F0A2923803F9C0A36FB45AA26F90C7FCA213F8486C
147ED807FFEF3FF8B500F8013C011FB512F0A34C3E7DBD53>I<B712F8EEFF8017E00001
9039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF3FC018E0A2EF1FF0A218F8A818F0A2
EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091B612C04CC7FC0280C9FCB3A73801FF
E0B612C0A3353E7DBD3E>80 D<D907FC130C90391FFF801C017FEBF03C3901FC03F83A03
F0007E7CD807C0EB1FFC4848130F001F140748C71203003E1401007E1400A2007C157C12
FCA2163CA36C151CA27EA26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC
6C14FF6C15C0013F14E0010714F0EB007F020713F89138007FFC150FED07FE15031501ED
00FFA200E0157FA3163FA27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB
07E0D8F9FCEB0FC03AF07F803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>
83 D<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E1707127C00
781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<
B691380FFFFEA3000301E0020113E06C01809138007F806CEF3F00017F163E181C6E153C
013F1638A26E1578011F1670A26D6C5DA26E140101075EA26E140301035EA26D6C4AC7FC
A2806D150EA26F131E027F141CA26F133C023F1438A26E6C5BA26F13F0020F5CA2EDF801
02075CA26E6C485AA2EDFE07020191C8FCA26F5A6E130EA2ED7F9CA216DCED3FF8A36F5A
A36F5AA26F5AA36F5A3F407EBD44>86 D<B500FE017FB5D88007B5FCA3000301C0010101
E0C713F86C90C849EC3FE07148EC0F807E7215006E143F017F190E84A26D6C60A24D7E6D
6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104037F6E0281140101036104077F17
006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA7F80160EA24CEB1FE003C0161E02
3F171C047814F0DBE070010F133C021F173804F014F84C1307DA0FF05EA2DBF1C0EB03FC
DA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E5FA24B157F020094C8FCA24B8103
7C153EA20378151E0338151C58407EBD5D>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E
5B77C319>91 D<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>93
D<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C
5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A485A
A248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C
0FFE3A01FFF807FC3A003FC001F0292A7DA82D>97 D<EA01FC12FFA3120712031201B1EC
03FC91381FFF8091387C07E09039FDE001F09039FFC000FC4A137E91C77E49158049141F
17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217E0161F17C06D1580EE3F006D5C6E13
FE9039F3C001F89039F1E003F09039E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>
I<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B121FA2
4848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13
076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A7DA8
28>I<ED01FC15FFA3150715031501B114FF010713E190381F80F990387E003D49131FD8
03F81307485A49130348481301121F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E00
0F14037F000714076C6C497E6C6C497ED8007C017913F890383F01F190380FFFC1903A01
FE01FC002D407DBE33>I<EB01FE90380FFFC090383F03F09038FC01F848486C7E484813
7E48487F000F158049131F001F15C04848130FA2127F16E090C7FCA25AA290B6FCA290C9
FCA67EA27F123F16E06C7E1501000F15C06C6C13036DEB07806C6C1400C66C131E017E5B
90381F80F8903807FFE0010090C7FC232A7EA828>I<EC1FC0EC7FF8903801F83C903807
E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE
487E007F13FFA320407EBF1C>I<167C903903F801FF903A1FFF078F8090397E0FDE1F90
38F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE
00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120F
A27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E140048
157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE01
7FC7FC90383FFFFC010313C0293D7EA82D>I<EA01FC12FFA3120712031201B1EC01FE91
3807FFC091381E07E091387803F09138E001F8D9FDC07F148001FF6D7E91C7FCA25BA25B
B3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0
C8FCACEA01FC127FA3120712031201B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2
EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147FB3B3A5123E127F38FF807E
14FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801FC00185185BD1C>I<EA01
FC12FFA3120712031201B292B51280A392383FFC0016E0168093C7FC153C5D5D4A5AEC07
C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9FE0140F496C7E01FC7F496C7E140181
6E7E81826F7E151F826F7EA282486C14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FF
A3120712031201B3B3B1487EB512F8A3153F7DBE1A>I<2701F801FE14FF00FF902707FF
C00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000FC2603F9C06D48
7F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8
F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC091381E07E091387803
F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5
D8F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E01F8131F4848EB
0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA9
6C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8
007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF9038
1FFF8091387C0FE09039FDE003F03A03FFC001FC6C496C7E91C7127F49EC3F805BEE1FC0
17E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001
F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733
>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF
1330491300A35BB3A5487EB512FEA31F287EA724>114 D<90383FC0603901FFF8E03807
C03F381F000F003E1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFF
C06C13F86C13FE6C7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A2
14017E1400A27E15F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01F
E01D2A7DA824>I<131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801
FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B39
7EB723>I<D801FC14FE00FF147FA3000714030003140100011400B3A51501A315031200
15076DEB06FF017E010E13806D4913FC90381FC078903807FFE00100903880FE002E297D
A733>I<B539E00FFFE0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D
5CA26D6C485AA2ECC007011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC
7801011370A2ECFEF001005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3
FFFE03FFF8A3290FFE003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C
15076D163C00004A6C1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE
9238707E03D90FE0017F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315
CE9138FB800F02FF14DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813
003D287EA642>I<B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805B
D93FC05B011F49C7FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81
141F814A7E81147BECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E
130F496D7E01FC80486C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A3
2707FE000313006C48EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C
48C7FCA26E5A010F130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7F
C0A36E5AA36EC8FCA2140EA2141E141C143C1438A2147800181370127EB45BA2495AA248
485AD87E07C9FCEA780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE00001
80140049485A001E495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA249
5A495A130F5C495A90393FC00380A2EB7F80EBFF005A5B484813071207491400485A4848
5BA248485B4848137F00FF495A90B6FCA221277EA628>I<B812F0A22C0280982D>I
E /Fq 35 123 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B768A20>46
D<EC7FC0903803FFF890380FC07E90393F001F80017E6D7E496D7E48486D7E48486D7EA2
48486D7E000F8149147E001F157FA3003F1680A249143F007F16C0A600FF16E0B3A2007F
16C0A66C6CEC7F80A3001F1600A36C6C14FEA200075D6D130100035D6C6C495A6C6C495A
017E495A6D495A90260FC07EC7FC903803FFF89038007FC02B447BC137>48
D<1438147814F81303130F13FFB5FC13F713071200B3B3B0497E497EB712C0A3224276C1
37>I<49B4FC010F13F0013F13FC9038FC03FF2601E00013C0D807C0EB3FE048486D7E90
C76C7E001E6E7E4881003814030078811270007C80B416807F7F81A46C485B6CC7FCC8FC
17005DA25E15075E4B5AA24B5A5E4B5A4B5A4BC7FC5D4A5A4A5A4A5AEC0FC04A5A92C8FC
143E5C5C495A4948EB0380EB078049C7FC011EEC07005B5B5B48485C485A49141E48B612
FE5A5A5A5AB75AA329427AC137>I<ECFFC0010713FC90381F80FF903978003FC0D801E0
EB0FE0484814F848486D7E90C71203486C8013E0486C806D7FA56C485B6C485CC8FCA24B
5AA25E4B5A5E4B5A4B5A4BC7FC15FCEC0FF0903807FFC015FC90C7B4FCED1FC06F7EED07
F86F7E826F7EA26F138017C0A2167F17E0A3121FEA7FC0A2487EA317C016FF5B6C481580
007EC75A007816006C4A5A7E6C4A5AD807C0EB0FF0D803F0495AC6B4EB7FC0013FB5C7FC
010F13F8010013C02B447BC137>I<16E015011503A21507150FA2151F153FA2157F15EF
15CF1401EC038F150F1407140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E
5B131813385B136013E0485A485AA248C7FC120EA25A5AA25A5AB812F8A3C8381FE000AC
4B7E4B7E027FB512F8A32D437CC237>I<0007151801E014F801FEEB1FF090B65A5E5E93
C7FC15FC15F015C0D90FFEC8FC90CAFCADEC7FC0903803FFF890380F807E90381C003F01
786D7E01E0EB0FE0496D7E5B6F7E90C77FC8120182A28281A21780A5123EEA7F8012FF7F
A34915005D48C7FC00705DA200784A5A1238003C4A5A6C5D6C4A5A6D495A6C6C495AD803
F049C7FC3900FE03FE90387FFFF8011F13C0D903FEC8FC29447AC137>I<EC01FE91381F
FFC091387E01F0903901F80078D903E07FD90FC07F495A49C7127F017E5C495B12015B12
0348486D5A167C484891C7FCA2121F5B123FA3127FA29038801FE0ECFFFC903883E03F3A
FF87000FC0018E6D7E019C6D7E01986D7E01B88001B06D7E01F080498017805BEE3FC0A3
4915E0A4127FA56C7EA217C0A2121F167F6C6C1580A20007EDFF006D5C000314016C6C5C
6D495A6C6C495A017F495A90391FC07F800107B5C7FC010113FC9038007FC02B447BC137
>I<121C121EEA1FC090B712F0A34816E0A217C017801700003CC8120F48151E5E007015
3816785E4B5A485D15034B5AC848C7FC150E151E5D5D157015F04A5AA24A5AA24A5A140F
A24AC8FCA25C143E147EA35CA21301A31303A25CA21307A6130FAA6D5AEB01C02C4579C2
37>I<EC7FC0903803FFFC90380F807F90393C000FC049EB03E001E06D7E48486D7E0003
157C4848147E163E48C8FC825AA37FA27F5E6D143E01F8147E6C6C147C01FF5C6CEB8001
02E05B6C6D485A6C9038FC0F806CD9FF1FC7FC6D13FC6D13F0130F6D13FC010113FF4980
D90F3F13E0D93E0F7FD9F8077F2601F0017F48486C7F4848EB3FFF4848010F138048C77E
48020113C0003E80007E153F007CED1FE0160F5A1607A21603A46C16C0127C1607007E16
806CED0F006C5D6D143ED80FE05C6C6C5CD801FCEB03F03A00FF803FC0013FB5C7FC0107
13FC010013C02B447BC137>I<EC7FC0903803FFF890380FC07E90393F001F80017E6D7E
48486D7E48486D7E48486D7E485A6F7E484880123F167F127F5B178012FFA2EE3FC0A617
E0A4007F157FA36C7E16FF121F6D5B000F15BF6C6C13030003153F6C6C13076C6C130E01
7E133C90261F80F013C0903807FFE00100130091C7FC167F1780A317005E5EA2D807C049
5A487E486C495AA24B5A5E49495A49495A6CC748C7FC157E3907C001FC3903F007F06CB5
5A6C6C1380D90FFCC8FC2B447BC137>I<BAFCA3C601F0C7121F6D4802011380013FED00
7F183F181F180F1807A2F003C0A31801A419E01800EE01C0A21900A41603A31607160F16
7F91B6FCA39138E0007F160F16071603A31601A693C9FCB0497E497EB7FCA33B447BC347
>70 D<003FBAFCA3903BF8000FFE000701C06D48130090C7163F007EF01F80007C180FA2
00781807A300701803A548F001C0A5C893C7FCB3B3A44B7E92383FFF8049B712F0A34243
7BC24E>84 D<157015F8A34A7EA24A7EA34A7E81A291380E3F80A2021E7FEC1C1FA24A6C
7EA34A6C7EA202F07FECE003A249486C7EA349486C7EA201078091C77EA249B67EA24981
011CC7121FA2013C810138140FA2496E7EA201F081491403120183486C140100074B7ED8
1FF84A7EB5027F13F8A335357CB43D>97 D<B77E16F016FC3A03FC0003FF6C4801001380
EE3FC017E0161FEE0FF0A217F8A21607A2160FA217F0161F17E0EE3FC0EE7F80EEFF00ED
03FE90B612F0A29039F80007FE9238007F80EE1FC0EE0FF0EE07F817FC160317FE160117
FFA617FE1603A2EE07FCEE0FF8EE1FF0EE3FE0486C903801FFC0B8120016FC16E030337B
B23A>I<4AB4EB0180021FEBF00391B5EAFC0701039038007E0FD907F8EB0F9FD91FE0EB
03DF4948EB01FF01FFC8FC4848157F4848153FA24848151F4848150F121F491507123F5B
A2007F1603A3484892C7FCAB6C7EEF0380A2123FA27F001F16076D1600000F5E6C6C150E
6C6C151E171C6C6C153C6C6C5DD93FC05C6D6CEB03E0D907F8495A902703FF807FC7FC01
00EBFFFC021F13F00201138031357BB33B>I<B7FC16F016FC3A03FE0003FF6C48903800
7F80EE1FE0707E707E707E1601707E177FA21880173F18C0A2EF1FE0A418F0AA18E0A4EF
3FC0A21880177F180017FE16015F4C5AEE0FF04C5AEE7FC0486CD903FFC7FCB712FC16F0
93C8FC34337BB23E>I<B812F0A3D803FEC7123F6C48EC07F816011600A21778A21738A3
171C1507A31700A25DA25D157F90B6FCA39038FC007F151F81A2811707A3170E92C7FCA4
171EA2173CA2177C17FC16011607486C143FB812F8A330337BB238>I<B812C0A3D803FE
C7FC6C48EC1FE0160716031601A21600A41770A2150EA21700A3151EA2153E15FE90B5FC
A3EBFC00153E151EA2150EA592C8FCAB48B4FCB512FEA32C337BB235>I<DA03FF130302
1FEBE00791B5EAF80F0103903800FE1FD90FF8EB1F3FD91FE0EB07BFD97F806DB4FC49C7
7E484880484881484881A2484881121F4981123F5BA2007F82A25B00FF93C7FCAA4BB512
F86C7EA2DB00011380003F6F1300837F121F7F120F6C7E7F12036C7E6C6C5DEB7FC0D91F
E05BD90FF8EB07DF903A03FF803F8F01009038FFFE07021FEBF80302030180C7FC35357B
B340>I<B5D8F803B512E0A3D803FEC7380FF8006C486E5AB390B7FCA301FCC71207B3A3
486C4A7EB5D8F803B512E0A333337BB23D>I<B512F8A33803FE006C5AB3B3A7487EB512
F8A315337BB21E>I<B500F890380FFFF0A3D803FEC76C13806C48913803FC0017F04C5A
5F4CC7FC161E5E5E5EED03E04B5A4B5A4BC8FC153E5D15F014014A7E4A7E140F4A7EEC7C
FF4A6C7EEBFDF09039FFE03FC04A6C7EEC800FD9FE007F496D7E6F7EA26F7E6F7E828370
7E707EA2707E707E83160383486C913807FF80B500F8011F13F8A335337BB23F>107
D<B512FEA3000390C9FCEA01FCB3A9EE01C0A416031780A41607A2160F161FA2167FEEFF
00486C1307B8FCA32A337BB233>I<D8FFFEEE7FFFA26D93B5FC000318C06C1880D9DF80
EC01DFA2D9CFC0EC039FA3D9C7E0EC071FA2D9C3F0140EA3D9C1F8141CA2D9C0FC1438A3
027E1470A26E14E0A391391F8001C0A291390FC00380A3913907E00700A2913803F00EA3
6E6C5AA26E6C5AA3ED7E70A26F5AA3486C6D5A487ED81FFC6D48EB3FC0B50080020FB5FC
A2ED070040337BB24A>I<D8FFFC91383FFFE07FA2D801FF020713006EEB01FC6E6D5A17
70EBDFE0EBCFF013C780EBC3FC13C180EBC0FF80816E7E6E7EA26E7E6E7E1403816E7E14
0081ED7F80ED3FC0A2ED1FE0ED0FF0150716F8ED03FC150116FEED00FF167F17F0163F16
1FA2160F1607486C1403487ED81FFC1401B56C1300A2177033337BB23D>I<EC07FF023F
13E0903901FE03FC903907F0007FD90FC0EB1F80D93F80EB0FE049C76C7E01FE6E7E4848
6E7E48486E7E4848157FA24848ED3F80001F17C0A24848ED1FE0A3007F17F049150FA300
FF17F8AA007F17F06D151FA2003F17E0A26D153F001F17C0A26C6CED7F80000717006D5D
00035E6C6C4A5A6C6C4A5A017F4A5A6D6C495AD90FC0EB1F80D907F0017FC7FC903901FE
03FC9039003FFFE0020790C8FC35357BB33F>I<B7FC16F016FC3A03FE0003FF6C489038
007F80EE3FC0EE1FE0EE0FF0A2EE07F8A217FCA617F8A2EE0FF0A2EE1FE0EE3FC0EEFF00
ED03FE90B612F816C001FCC9FCB3A2487EB512F8A32E337BB238>I<B612F8EDFF8016E0
3A03FE000FF86C48EB03FEED00FF707E707E83161FA283A55FA24C5A5F4CC7FC16FEED03
FCED1FF090B6128003FCC8FC9038FC003FED0FC06F7E6F7E6F7E82150082A382A383A4EF
C01CA2167FEFE03C486C023F1338B500F890381FF07893380FF8F0933803FFE0CAEA7F80
36347BB23C>114 D<90390FF0018090387FFE0348B512873907F00FEF390FC001FF48C7
FC003E143F151F5A150F5A1507A36C1403A27E6C91C7FC6C7E7FEA3FF8EBFF806C13FC6C
EBFFC06C14F06C80C614FE011F7F01031480D9001F13C014019138003FE0151F150FED07
F0150312E01501A37EA216E06C1403A26CEC07C06CEC0F806C6CEB1F0001E0133ED8FBFE
13FC00F0B55AD8E01F13E0D8C00390C7FC24357BB32E>I<007FB812C0A3903A8007FC00
3F277E0003F8130F007C16070078160300701601A200F017E0A2481600A6C71600B3AA4A
7E4A7E010FB512FEA333327CB13B>I<B500F890383FFFE0A3D803FEC7000713006C48EC
01FC705A1770B3AE000016F06D5DA2017E1401017F4A5A7F6D6C495A6E49C7FC6D6C131E
D903F0137C903901FE03F89039007FFFE0021F1380DA03FCC8FC33347BB23D>I<B500E0
ECFFFEA3000790C8EA3FF0D803FCED1FC00001EE0F806D16001200170E6D151E6D151CA2
6D6C5CA26E1478011F157080010F5DA26E130101075D6E130301035DA26D6C49C7FCA26E
5B0100140EA2027F5BA2ED803C023F133815C0021F5BA2EDE0F0020F5B15F102075BA291
3803FB80A215FF6E90C8FCA26E5AA3157CA2153837347DB23D>I<B5D8E007B5903803FF
F8A3D80FFEC7D83FF8010013E06C48DA1FE0EC7F806C48F03F006D020F151E1201706C14
1C1A3C6C6C020F1538836D18786D4A6C1470161D6E17F0013FDA3DFE5C16386E1601011F
DA78FF5CEE707F6D6C4C5A9338E03F80A26D6C4CC7FC923901C01FC0A2D903F8160E9239
03800FE0A2D901FC5E9239070007F0193C6D6C481538030EEB03F81978DA7F1E1570031C
EB01FC039C15F0DA3FBC6E5A03B8130003F814FF021F5E4B147FA2020F5E4B143F020793
C8FC4B80A20203151E4B140E4D347DB253>I<003FB7FCA39039FC0001FE01E013030180
14FC90C7EA07F8003E140F003C15F0007CEC1FE00078EC3FC0A2ED7F800070ECFF00A24A
5A4A5AC712075D4A5A141F5D4A5A4A5AA24AC7FC495AA2495A495A130F4A1307495A133F
5C495A49C7FC160F485A485AA24848141E485A001F153E49147E484814FE007F14034913
1FB7FCA328337BB232>122 D E /Fr 38 122 df<EF7FF80407B5FC93391FC00FC09339
3E0001E004FCEB00F04B4813014B4813075E0307140FA24B5A19E0031FEC03804C90C7FC
A3153F93C9FCA45D157EA415FE91B8FCA260DA00FCC7127E020115FE4B5CA31701601403
5D170360A214074B130760A3020F140F4B5CA3171F021F5D5DA2053F13E01801023F16C0
92C7FCA2EF7F03057E13805C027E15071900173E180E02FEEC1E1E4AEC1F1CEF07F8EF01
E094C8FC495AA35C1303A2001C5B127FEAFF075CA2495A00FE90CBFCEAF81FEA701EEA78
3CEA1FF0EA07C03C5A83C537>12 D<13F0EA03F8EA07FC120FA6EA03CCEA001C1318A213
381330A2137013E013C0120113801203EA0700120E5A5A5A5A5A0E1D6BC41E>39
D<007FB5FCB6FCA214FEA21805789723>45 D<130FEB1FC0133FEB7FE013FFA214C0EB7F
801400131E90C7FCB3A5120FEA3FC0127FA212FFA35B6CC7FC123C132B76AA1E>58
D<DC0FF8130393B513070307ECC00F923A1FF803E01F923A7FC000F81E4BC7EA7C3EDA03
FCEC3C7EDA0FF0EC1EFE4A48EC0FFC4A4814074AC8FC02FE1503494816F8130349481501
495A494816F0495A137F5C01FF17E04890C9FCA2485A19C0485AA2485A95C7FC121F5BA2
123F5BA3127F5BA4485AA41838A218781870A218F0007F5F1701601703003F5F17076D4B
C7FC001F160E171E6C6C5D6D5D00075E6C6C4A5A6DEC07C06C6C4A5AD8007F023EC8FCD9
3FC013FC90391FF807F00107B512C0010191C9FC9038001FF0404872C546>67
D<91B91280A30201902680000713006E90C8FC4A163FA24B81A30203160E5DA314074B15
1E191CA2140F5D17075F021F020E90C7FC5DA2171E023F141C4B133CA2177C027F5CED80
0392B5FCA291B65AED00071601A2496E5A5CA2160101035D5CA2160301075D4A90CAFCA3
130F5CA3131F5CA3133F5CA2137FA313FFB612E0A341447AC340>70
D<91B6D8803FB512E0A302010180C7387FE0006E90C86C5A4A167FA24B5EA219FF14034B
93C7FCA26014074B5DA21803140F4B5DA21807141F4B5DA2180F143F4B5DA2181F147F92
B75AA3DAFF80C7123F92C85BA2187F5B4A5EA218FF13034A93C8FCA25F13074A5DA21703
130F4A5DA21707131F4A5DA2170F133F4A5DA2017F151FA24A5D496C4A7EB6D8803FB512
E0A34B447AC348>72 D<027FB512E091B6FCA20200EBE000ED7F8015FFA293C7FCA35C5D
A314035DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA31303
5CA313075CA3130F5CA3131F5CA2133FA25CEBFFE0B612E0A25D2B447BC326>I<91B612
F0A25F020101C0C7FC6E5B4A90C8FCA25DA314035DA314075DA3140F5DA3141F5DA3143F
5DA3147F5DA314FF92C9FCA35B5CA3010316104A1538A21878010716705C18F018E0010F
15015C18C01703011F15074A1580170FA2013FED1F004A5C5F017F15FE16034A130F01FF
EC7FFCB8FCA25F35447AC33D>76 D<91B56C49B512E0A28202009239000FFC00F107F070
6E5A4A5F15DF705D1907EC03CFDB8FF892C7FCA203875D02077F0303150EA270141EEC0F
01020E161C826F153C141E021C6E1338167F1978023C800238013F1470A27113F0027813
1F02705E83040F130102F014F84A5E1607EFFC0313014A01035C17FE1807010314014A02
FF90C8FCA2705B0107168F91C8138E177F18DE5B010EED3FDC18FCA2011E151F011C5EA2
170F133C01386F5A1378A201F81503486C5EEA07FEB500F01401A2604B447AC348>78
D<EE1FF84BB5FC923907F01FC092391F8003F092397E0001F8DA01F86D7EDA03E0147EDA
0FC0804A48EC1F804AC813C0027E150F4A16E049481507494816F01307495A494816F801
3F16035C137F49C9FC4917FC120112035B1207491607120FA25B121F19F849160F123FA3
4848EE1FF0A3183F19E0485A19C0187FA2F0FF80A219005F604D5AA2007F4C5A4D5AA24D
5A003F5F4D5A6D4BC7FC001F5E4C5A6C6C5DEE03F06C6C4A5A0003ED1FC06C6C4A5A6C6C
027EC8FC017EEB01F890393F8007F090390FE03F80902603FFFEC9FC9038007FE03E4872
C54B>I<91B77E18F818FE020190398001FF806E90C7EA3FC04AED1FE0F00FF04BEC07F8
180319FC14034B15FEA314075DA3020FED07FC5DA2F00FF8141F4B15F0F01FE0F03FC002
3F16804BEC7F0018FEEF03F8027F4A5A4BEB1FC04CB4C7FC92B512F891B612E092380003
F8EE00FE177F496F7E4A6E7EA28413034A140FA2171F13075CA2173F130F5CA24D5A131F
5CA3013F170E5CA2017FEE801E191C4A163C496C1638B66C90383FC070051F13F094380F
E1E0CA3803FF80943800FE003F467AC347>82 D<DB03FE130C92390FFF801C037FEBE03C
9238FE03F8913A03F0007C7C4A48EB3EF84A48131F4A48130F4AC7FC027EEC07F05C1703
495A18E0495AA213074A15C0A3130F1880A28094C7FCA280806D7EECFFE015FC6DEBFF80
6D14F016FC6D14FF023F80020F801403DA003F7F150703007F163F161F160FA21607A312
0716031607A2485EA2120E160F001E5EA2001F4B5AA2484BC7FC6D143E167E6D5C007F4A
5A6D495AD87CF0495AD8787CEB1F8027F03F807FC8FC90381FFFFCD8E00713F039C0007F
80364879C537>I<48B912F85AA2913B0007FC001FF0D807F84A130701E0010F14034916
0148485C90C71500A2001E021F15E05E121C123C0038143F4C1301007818C0127000F014
7F485DA3C800FF91C7FC93C9FCA35C5DA314035DA314075DA3140F5DA3141F5DA3143F5D
A3147F5DA314FF92CAFCA35B5CA21303A21307497E007FB612C0A25E3D446FC346>I<EC
1F80EC7FE0903901F07070903907C039F890380F801D90381F001F013E6D5A137E5B4848
13075E485A120749130F000F5DA2485A151F003F5D5BA2153F007F92C7FC90C7FCA25D15
7E12FEA29238FE0380EDFC071700A2007E13015E913803F80E1407003E010F131E161C6C
131C02385B3A0F80F078783A07C3E07C703A01FF801FE03A007E000780292D76AB32>97
D<EB0FE0EA07FFA338001FC0130F131FA25CA3133F91C8FCA35B137EA313FE5BA312015B
EC1F80EC7FE03903F9E0F89038F3C07C9038F7003E13FE48487F5BA2491480485AA25BA2
121F5BA2153F123F90C7FCA2157F481500127EA25D5D5AA24A5AA24A5AA2007C5C4A5A14
0F5D4A5A003C49C7FC003E137E001E5B6C485A380783E03803FF80C648C8FC214676C42D
>I<EC0FE0EC7FF8903801F81E903807E00F90390F80078090381F0003017E14C049131F
0001143F5B4848EB7F801207485AED3E00484890C7FCA2485AA2127F90C9FCA35A5AA45A
A5ED0180ED03C0ED0780A2007CEC0F00007E141E003E147C15F06CEB03E0390F800F8026
07C07EC7FC3801FFF838007FC0222D75AB2D>I<EE07F0ED03FFA39238000FE01607160F
A217C0A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80EC7FE1903801F071
903907C039F890380F801D90381F001F013E130F017E5C5B48481307A248485C12074913
0F120F5E485A151F123F495CA2153F127F90C790C7FCA25DA200FE147EA29238FE038016
0703FC1300A2007E13015E913803F80E1407003E010F131E161C6C131C02385B3A0F80F0
78783A07C3E07C703A01FF801FE03A007E0007802C4676C432>I<EC0FE0EC7FF8903801
F83E903807C00F90391F800780EB3F00017E14C0491303485A48481307000715805B000F
140F484814005D4848133E15FCEC07F0007FEBFFC0D9FFFEC7FC14C090C9FC5A5AA55AA4
ED0180ED03C0007CEC0780A2007EEC0F00003E141E157C6C14F06CEB03E03907800F8026
03C07EC7FC3801FFF838003FC0222D75AB2D>I<EE0F80EE3FE0EEF870923801F0389238
03E0F8923807E1FC16C3ED0FC7A2EE87F892381F83F0EE81E0EE8000153F93C7FCA45D15
7EA415FE5DA349B512FEA390260001F8C7FCA314035DA414075DA4140F5DA4141F5DA414
3F92C8FCA55C147EA314FE5CA413015CA4495AA35C1307121C007F5B12FF495AA291C9FC
485AEAF81E485AEA7878EA1FF0EA07C02E5A83C51E>I<15FCEC03FF91390F8383809139
3E01CFC091387C00EF4A13FF4948137F010315804948133F495A131F4A1400133F91C75A
5B167E13FE16FE1201495CA215011203495CA21503A2495CA21507A25EA2150F151F5E00
01143F157F6C6C13FF913801DF8090387C039F90383E0F3FEB0FFCD903F090C7FC90C7FC
5DA2157EA215FEA25DA2001C495A127F48495A14074A5A485C023FC8FC00F8137E387C01
F8381FFFE0000390C9FC2A407BAB2D>I<14FE137FA3EB01FC13001301A25CA21303A25C
A21307A25CA2130FA25CA2131FA25C157F90393F83FFC091388F81F091381E00F802387F
4948137C5C4A137EA2495A91C7FCA25B484814FE5E5BA2000314015E5BA2000714035E5B
1507000F5DA249130F5E001F1678031F1370491480A2003F023F13F0EE00E090C7FC1601
48023E13C01603007E1680EE070000FEEC1E0FED1F1E48EC0FF80038EC03E02D467AC432
>I<143C147E14FE1301A3EB00FC14701400AE137C48B4FC3803C780380703C0000F13E0
120E121C13071238A21278EA700F14C0131F00F0138012E0EA003F1400A25B137EA213FE
5B12015BA212035B141E0007131C13E0A2000F133CEBC038A21478EB807014F014E0EB81
C0EA0783EBC7803803FE00EA00F8174378C11E>I<16F0ED03F8A21507A316F0ED01C092
C7FCAEEC01F0EC07FCEC1E1EEC380F0270138014E0130114C0EB03800107131F1400A213
0E153F131E011C140090C7FC5DA2157EA215FEA25DA21401A25DA21403A25DA21407A25D
A2140FA25DA2141FA25DA2143FA292C7FCA25C147EA214FE001C5B127F48485A495AA248
485A495AD8F81FC8FCEA707EEA3FF8EA0FC0255683C11E>I<14FE137FA3EB01FC130013
01A25CA21303A25CA21307A25CA2130FA25CA2131FA25C167E013F49B4FC92380783C091
38000E07ED3C1F491370ED603F017E13E0EC01C09026FE03801380913907000E00D9FC0E
90C7FC5C00015B5C495AEBF9C03803FB8001FFC9FCA214F03807F3FCEBF07F9038E01FC0
6E7E000F130781EBC003A2001F150FA20180140EA2003F151E161C010013E0A2485DA200
7E1578167000FE01015B15F1489038007F800038021FC7FC2A467AC42D>I<EB03F8EA01
FFA3380007F013031307A214E0A2130FA214C0A2131FA21480A2133FA21400A25BA2137E
A213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7
FCA2387F01C01303007E1380A2130700FE130012FCA25B130EEA7C1E131CEA3C3CEA3E78
6C5AEA07C0154678C419>I<D801F0D90FE0EB07F0D803FCD97FF8EB3FFC28071E01F03E
EBF81F3E0E1F03C01F01E00F80271E0F8700D983807F001C018E90390F870007003C019C
148E003801B802DC8002F814FC26781FF05C0070495CA24A5C00F0494948130FD8E03F60
91C75B1200043F141F4960017E92C7FCA24C143F01FE95C7FC49147E6104FE147E120149
4A14FE610301EE0780000305011400494A14F8A2030302035B0007F0F00E495C1A1E0307
EDE01C000F193C494A153862030F020113F0001FF0F1E0494A903800FF800007C7D80380
023EC7FC492D78AB50>I<D801F0EB0FE0D803FCEB7FF83A071E01F03E3A0E0F03C01F00
1ED987001380001C018E130F003C139C003801B814C014F838781FF000705BA25C00F049
131FD8E03F158091C7FC1200163F491500137EA25E01FE147E5B16FE5E12014913015E17
0F00030203130E4914F0A20307131E0007EDE01C5B173CEEC038000F167849157017E0ED
03C1001FEDE3C049903801FF000007C8127C302D78AB37>I<EC0FE0EC7FFC903801F83E
903907E00F8090390F8007C0EB1F00017EEB03E04914F0A248481301484814F81207485A
A2485AA2485A1503127F90C7FCA215074815F05AA2150F16E05AED1FC0A21680153F1600
5D157E5D007C495A007E495A003E5C4A5A6CEB1F80260F803EC7FC3807C0FC3801FFF038
003F80252D75AB32>I<D903E0137E903A07F801FF80903A0E3C0783E0903A1C1E0F01F0
903A3C1F1C00F801385B017849137C01705BA24A48137E01E05BA292C7FC00015B13C014
7EC7FC02FE14FEA25CA20101140117FC5CA20103140317F85CA20107EC07F0A24AEB0FE0
A2010F15C0EE1F80163F1700496C137E5E4B5A9138B803F090393F9C07E091389E0F80DA
07FEC7FCEC01F849C9FCA2137EA213FEA25BA21201A25BA21203A21207B512F0A25C2F3F
7FAB32>I<D801F0EB3F803A03FC01FFF03A071E03C0F83A0E0F0F007C001E90389E01FC
001C139CECB803003813F0A2D91FE013F80078EC00E00070491300A200F05BEAE03F91C8
FC1200A25B137EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC26
2D78AB29>114 D<EC0FE0EC7FF8903801F01E903803C00F90390780078090380F000301
1E14C0150749131FA2017CEB3F801378137CED0E0092C7FC137E137F14F014FF6D13C06D
13F06D7F6D7F1300EC0FFE14011400157F81120E003F141E487EA2153E48C7123CA200FC
5C12705D0078495A6C495A6CEB0F80260F803EC7FC3803FFF838007FC0222D7AAB28>I<
1470EB01F8A313035CA313075CA3130F5CA3131F5CA2007FB512E0B6FC15C0D8003FC7FC
A25B137EA313FE5BA312015BA312035BA312075BA3120F5BA2EC0780001F140013805C14
0E003F131EEB001C143C14385C6C13F0495A6C485AEB8780D807FEC7FCEA01F81B3F78BD
20>I<137C48B414072603C780EB1F80380703C0000F7F000E153F121C0107150012385E
1278D8700F147E5C011F14FE00F05B00E05DEA003FEC0001A2495C137E150313FE495CA2
15071201495CA2030F13380003167849ECC070A3031F13F0EE80E0153F00011581037F13
C06DEBEF8300000101148090397C03C787903A3E0F07C70090391FFE01FE903903F00078
2D2D78AB34>I<017C143848B414FC3A03C78001FE380703C0000F13E0120E001C140001
07147E1238163E1278D8700F141E5C131F00F049131C12E0EA003F91C7123C16385B137E
167801FE14705BA216F0000115E05B150116C0A24848EB0380A2ED0700A2150E12015D6D
5B000014786D5B90387C01E090383F0780D90FFFC7FCEB03F8272D78AB2D>I<017CEE03
8048B4020EEB0FC02603C780013FEB1FE0380703C0000E7F5E001C037E130F0107160712
3804FE130300785DEA700F4A1501011F130100F001804914C012E0EA003FDA000314034C
14805B137E0307140701FE1700495CA2030F5C0001170E495CA260A24848495A60A26012
01033F5C7F4B6C485A000002F713036D9039E7E0078090267E01C349C7FC903A1F0781F8
1E903A0FFF007FF8D901FCEB0FE03B2D78AB41>I<02F8133FD907FEEBFFE0903A0F0F83
C0F0903A1C07C780F890393803CF03017013EE01E0EBFC07120101C013F8000316F00180
EC01C000074AC7FC13001407485C120EC7FC140F5DA3141F5DA3143F92C8FCA34AEB03C0
1780147EA202FEEB0700121E003F5D267F81FC130E6E5BD8FF83143CD903BE5B26FE079E
5B3A7C0F1F01E03A3C1E0F83C0271FF803FFC7FC3907E000FC2D2D7CAB2D>I<137C48B4
14072603C780EB1F80380703C0000F7F000E153F001C1600130712385E0078157EEA700F
5C011F14FE00F0495B12E0EA003FEC00015E5B137E150301FE5C5BA2150700015D5BA215
0F00035D5BA2151F5EA2153F12014BC7FC6D5B00005BEB7C0390383E0F7EEB1FFEEB03F0
90C712FE5DA214015D121F397F8003F0A24A5A4848485A5D48131F00F049C8FC0070137E
007813F8383801F0381E07C06CB4C9FCEA01FC294078AB2F>I E
/Fs 40 122 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>58
D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A
1206120E5A5A5A12600B1D78891B>I<F001C0F007E0181FF07FC0943801FF00EF07FCEF
1FF0EF7FC04C48C7FCEE0FFCEE3FF0EEFFC0030390C8FCED0FF8ED3FE0EDFF80DA03FEC9
FCEC1FF8EC7FE0903801FF80D907FECAFCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC0
48CCFCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FE903801FF809038007FE0
EC1FF8EC03FE913800FF80ED3FE0ED0FF8ED03FF030013C0EE3FF0EE0FFCEE01FF933800
7FC0EF1FF0EF07FCEF01FF9438007FC0F01FE01807F001C03B3878B44C>I<1618163C16
7CA2167816F8A216F01501A216E01503A216C01507A21680150FA2ED1F00A2151E153EA2
153C157CA2157815F8A25D1401A24A5AA25D1407A25D140FA292C7FC5CA2141E143EA214
3C147CA25CA25C1301A25C1303A25C1307A25C130FA291C8FC5BA2133EA2133C137CA213
7813F8A25B1201A25B1203A2485AA25B120FA290C9FC5AA2121E123EA2123C127CA21278
12F8A25A126026647BCA31>I<127012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB
1FF0EB07FE903801FF809038007FE0EC1FF8EC03FE913800FF80ED3FE0ED0FF8ED03FF03
0013C0EE3FF0EE0FFCEE01FF9338007FC0EF1FF0EF07FCEF01FF9438007FC0F01FE0A2F0
7FC0943801FF00EF07FCEF1FF0EF7FC04C48C7FCEE0FFCEE3FF0EEFFC0030390C8FCED0F
F8ED3FE0EDFF80DA03FEC9FCEC1FF8EC7FE0903801FF80D907FECAFCEB1FF0EB7FC04848
CBFCEA07FCEA1FF0EA7FC048CCFC12FC12703B3878B44C>I<4CB46C1318043F01F01338
4BB512FC0307D9007E1378DB1FF090380F80F0DB7F80EB03C1DA01FEC7EA01C34A48EC00
E7DA0FF0ED7FE04A48153F4A5A02FFC9121F494817C04948160F495A130F4A1780494816
07495A137F4948170091CAFC5A485A1906485AA2485A96C7FC121F5BA2123F5BA3127F5B
A4485AA419C0A2180161127F180396C7FC6018066C6C160E601818001F17386D5E000F5F
6D4B5A6C6C4B5A00034CC8FC6C6C150E6C6C153C017F5DD93FC0EB01E0D91FF0EB0FC0D9
07FE017FC9FC0101B512FCD9003F13E0020790CAFC45487CC546>67
D<91B912FCA3020001C0C7123F6F48EC03F803FF1501190093C91278A21A385C5DA30203
17305DA314074B1460A218E0020F4B13005DA21701021F5D4B13031707170F023F027FC8
FC92B6FCA391397FC0007E4B131EA2170E02FF140C92C7FCA2171C49031813035C611906
010392C7FC4A160E190C191C010717184A163819301970130F4A5E180161011F16034A15
074E5A013F163F4EC7FC4AEC03FF01FFED3FFEB9FCA26046447CC348>69
D<91B912F8A3020001C0C7123F6F48EC07F003FF1503190193C9FCA21A705C5DA3020317
605DA314075D18C01701020F4B13005DA21703021F92C8FC4B5BA25F023F141E4B13FE92
B5FCA24A5CED8000173CA202FF141892C7FCA217384915305CA21770010315604A91C9FC
A313075CA3130F5CA3131F5CA2133FA313FFB612F8A345447CC33F>I<4CB46C1318043F
01F013384BB512FC0307D9007E1378DB1FF090380F80F0DB7F80EB03C1DA01FEC7EA01C3
4A48EC00E7DA0FF0ED7FE04A48153F4A5A02FFC9121F494817C04948160F495A130F4A17
8049481607495A137F4948170091CAFC5A485A1906485AA2485A96C7FC121F5BA2123F5B
A3127F5BA4485A4CB612805EA293C7EBE000725AA3007F60A218FF96C7FCA26C7E5F606C
7EA2000F16036D5E6C6C15070003160F6C6C151F6C6CED3DF8D97F8014786D6CEB01E0D9
1FF0903807C078D907FE90387F00700101B500FC1330D9003F01F090C8FC020790CAFC45
487CC54D>I<027FB512F8A217F09139007FF000ED3FC0157FA25EA315FF93C7FCA35C5D
A314035DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA31303
5CA313075CA3130F5CA2131FA25CEB7FF0007FB512F0B6FCA22D447DC32B>73
D<EE03FF047F13F0923901FC01FC92390FE0007F033FC7EA1FC003FEEC07E0DA01F86E7E
DA07F06E7EDA0FC06E7E4A4881027FC9127E02FE167F49488249481780495A010FEF1FC0
5C495A494817E0137F91CAFC5B4848170FF11FF0485AA2485AA2120F5B001F19E0A24917
3F123FA34848EF7FC0A3F1FF80A2485A4E1300A34E5AA24E5A61180F007F60181F614E5A
4E5A6C7E4EC7FC4D5A001F4C5A6D4B5A000F5F6C6C4B5AEF3F806C6C4BC8FC6C6C15FE6C
6CEC01F8017FEC07F06D6CEB1FC0D90FE0017FC9FC903903F803FC0100B512E0DA0FFECA
FC44487CC54B>79 D<91B712FEF0FFE019F802009039C0000FFE6F48EB01FF03FF913800
7F80F13FC093C8EA1FE0A24AEE0FF0A25D1AF81403A25DA21407F11FF05DA2020FEE3FE0
A24B16C0197F021F1780F1FF004B4A5A4E5A023F4B5A4E5A4BEC3FC006FFC7FC027FEC07
FC92B612F018800380CAFC14FFA292CBFCA25BA25CA21303A25CA21307A25CA2130FA25C
A2131FA25CA2133FA25CEBFFE0B612E0A345447CC33F>I<9339FF8001800307EBF00303
3F13FC9239FF007E07DA01F8EB0F0FDA07E09038079F004A486DB4FC4AC77E023E804A5D
187E5C495A183C495AA213074A1538A3130F183080A295C7FC806D7E8014FF6D13E015FC
6DEBFFC06D14FC6E13FF6E14C0020F80020314F8EC003F03077F9238007FFE160F160370
7E8283A283A21206A4000E163EA2120C177E001E167CA25F5F003F15014C5A6D4A5A4C5A
486C4AC8FC6D143ED87CF85CD8787E495A3AF01FC00FE0D8E007B51280010149C9FC39C0
003FF039487BC53C>83 D<48BA12C05AA291C7D980001380D807F092C7121F4949150F01
80170748C75B1903120E48020316005E12181238003014074C5C00701806126000E0140F
485DA3C8001F92C7FC5EA3153F5EA3157F5EA315FF93CAFCA35C5DA314035DA314075DA3
140F5DA3141F5DA3143F5DA2147FA214FF01037F001FB612FCA25E42447EC339>I<003F
B500F80103B512E0A326003FF8C8381FF800D91FE0ED07E0013F705A615C96C7FC60017F
16065CA2180E01FF160C91C9FCA2181C4817185BA21838000317305BA21870000717605B
A218E0120F495EA21701121F495EA21703123F4993C8FCA25F127F491506A2170E00FF16
0C90C9FC171CA21718173817304816705F6C5E6C15014C5A4CC9FC6C150E6D141E001F5D
6D5C6C6CEB01E06C6C495A6C6CEB1F80C6B401FECAFC90387FFFF8011F13E0010190CBFC
43467AC342>I<007FB56C91381FFFF8B65DA2000101E0C8000313006C0180ED01FCF000
F0614E5AA2017F4C5A96C7FC1806A2606E5DA2013F5E1870186060A24D5A6E4AC8FCA201
1F1506170E170C5FA26E5C5FA2010F5D16015F4CC9FCA26E13065EA201075C5EA25E16E0
6E5B4B5A13034BCAFC1506A25D151CECFE185D13015D5DA26E5AA292CBFC5C13005C5CA2
5CA25C45467BC339>I<023FB500E0011FB5FCA39126007FFEC7000313E0DB3FF8913801
FE006F486E5A1AF06F6C4A5A626F6C4A5A0706C7FC190E6F6C5C616F6C5C6171485A6F5D
4EC8FC93387FC00660706C5A6060706C5A17F193380FFB8005FFC9FC5F705AA2707EA370
7E5E04067F5E93381C7FC0163816704C6C7EED01C04B486C7E160015064B6D7E5D4B6D7E
5D5D4A486D7E14034AC76C7E140E5C4A6E7F143002E06F7E495A0103707E495A131F496C
4B7E2603FFE04A487E007F01FC021FEBFFF0B5FCA250447EC351>88
D<B66C91381FFFFCA21AF8000101E0C8000313806C49923801FC004A16F06D6C5E4E5A61
6D6C4BC7FC180E606D6C1518606E5D010F5E4D5A6D6C14034DC8FC17066D6C5C5F5F6D6C
5C17E04C5A6D01805B4CC9FCEDC006027F5B5EEDE038023F5B16606E6C5AEDF18003F3CA
FCEC0FFEA25D6E5A5D140FA35D141FA35D143FA35D147FA392CBFC5CA3495AA3EB07FF00
07B6FCA25D46447CC339>I<020FB812C05C1A809326800001130003F8C7FCDA3FE04A5A
03804A5A92C8485A027E4B5A027C4B5A02784B5A4A4B5AA24A4A90C7FC4A4A5A01014B5A
4D5A4A4A5A01034B5A91C8485A4D5AA290C84890C8FC4C5A4C5A4C5A4C5A4C5A4C5A4C5A
A24B90C9FC4B5A4B5A4B5A4B5A4B5A4B5AA24B5A4A90CAFC4A5A4A4814064A5A4A5A4A48
140E4A48140CA24A48141C4990C8121849481538495A49485D495A494815F049485D1701
494814034890C8485A4848150F4848151F48484B5A484815FF48481403043F90C8FC48B8
FCB9FC5F42447BC343>I<EC0FC0EC7FF0903901F8381C903907E01C7E90380FC00E9039
3F0007FE496D5A13FE485A49130100035D485A120F491303001F5DA2485A1507007F5D5B
A2150F00FF5D90C7FCA2151F5E5AA2033F1330EE00701760A24B13E017C015FE007E1301
02031301003ED9073E1380003F010E13036C011C14006C6C486C5A3A07C0F00F0E3A01FF
C007FC3A007F0001F02C2D7CAB33>97 D<EB0FE0EA07FFA338001FC0130F131FA25CA313
3F91C8FCA35B137EA313FE5BA312015BEC0FC0EC3FF00003EBF07C9038F3C03E9038F700
1F01FE14804848130F4914C05B16E0485A5BA3121F5BA2151F123F90C7FCA2153F4815C0
127EA2157F16805A16005DA24A5A007C5CA24A5A4A5A5D003C130F003E495A001E495A00
1F017EC7FC6C5B3807C1F03801FFC06C6CC8FC23467CC429>I<EC07F8EC3FFF9138FC07
C0903903F000E049481370D91F80133049C71270017EEB03F801FE1307485A4848EB0FF0
12075B000FEC07C0484890C7FCA2485AA2127F5BA312FF90C9FCA45AA516181638167000
7E15E0ED01C06CEC0380ED07006C6C131E000F14383907C001F03903F00FC02600FFFEC7
FCEB1FF0252D7CAB2A>I<EE01FC16FFA3EE03F816011603A217F0A21607A217E0A2160F
A217C0A2161FA21780A2163FA21700EC0FC091387FF07F903801F838903907E01C7E9038
0FC00E90393F0007FE49130301FE5C485A491301120348485C120F491303121F5E485A15
07127F495CA2150F12FF90C75BA2151FA2485DA2033F13301770EE0060A24B13E017C015
FE007E130102031301003ED9073E1380003F010E13036C011C14006C6C486C5A3A07C0F0
0F0E3A01FFC007FC3A007F0001F02E467CC433>I<EC07F8EC3FFE903901FC0780903903
F003C090390FC001E090381F8000017FC7FC01FE1470485A484814F0000715E05B000F14
01484814C015034848EB0780ED1F0015FC007FEB1FF090B5128002F0C7FC0180C8FC12FF
90C9FCA55AA41618007E15381670007F15E06CEC01C0ED03806CEC07006C6C131E6D1338
3907E001F03901F00FC026007FFEC7FCEB1FF0252D7CAB2D>I<EE07E0EE1FF8EE7C1CEE
F80E923801F03E923803E07F17FFED07E116C117FE92380FC0FC177817004B5AA4153F93
C7FCA45D157EA491B61280A3DA00FCC7FCA314015DA414035DA414075DA4140F5DA5141F
5DA4143F92C8FCA45C147EA45CA45C1301A25CA2EA1C03007F5B12FF5C13075C4848C9FC
12F8EA601EEA783CEA1FF0EA07C0305A7BC530>I<157E913803FF8091390FC1E0E09139
1F0073F0027E13334A133F4948131F010315E04948130F495AA2494814C0133F4A131F13
7F91C713805B163F5A491500A25E120349147EA216FEA2495CA21501A25EA21503150700
015D150F0000141F6D133F017CEB77E090383E01E790381F078F903807FE0FD901F85B90
C7FC151FA25EA2153FA293C7FCA2001C147E007F14FE485C4A5A140348495AEC0FC000F8
495A007C01FEC8FC381FFFF8000313C02C407EAB2F>I<14FE137FA3EB01FC13001301A2
5CA21303A25CA21307A25CA2130FA25CA2131FA25CED3FC090393F81FFF0913887C0FC91
380E007E023C133ED97F70133F4A7F4A14805C13FF91C7FC5BA24848143F17005BA20003
5D167E5BA2000715FE5E5B1501000F5DA24913035E001F1607030713064914E0150F003F
EDC00E170C90C7141CEE80184816381730007E167017E000FE91380781C0EEC380489138
01FF000038EC007C30467BC438>I<141E143F5C5CA3147E143891C7FCAE133EEBFF8038
01C3C0380781E0380601F0120E121CEA180312381230A2EA700700605BA2EAE00F00C05B
EA001F5CA2133F91C7FCA25B137E13FE5BA212015BEC03800003140013F01207495A1406
140E140CEBC01C141814385C00035BEBE1C0C6B45A013EC7FC19437DC121>I<163C16FE
A21501A316FCED00701600AE15FCEC03FF91380F0780021C13C091383803E0147014E014
C01301EC8007130314005B0106130F130E010C14C090C7FC151FA21680A2153FA21600A2
5DA2157EA215FEA25DA21401A25DA21403A25DA21407A25DA2140FA25DA2141F5DA2143F
001C91C7FC127F48137E5CA248485AEB03E038F807C038781F80D83FFEC8FCEA07F02756
81C128>I<14FE137FA3EB01FC13001301A25CA21303A25CA21307A25CA2130FA25CA213
1FA25C163F013FECFFC0923803C0E09138000703ED1E0F491338ED701F017E13E0EC01C0
01FE018013C00203EB07004948C8FC140E00015B5C495A5C3803FBC001FFC9FC8014F838
07F1FE9038F03F809038E00FE06E7E000F130381EBC001A2001FED01C017801380A2003F
15031700010013F05E481506160E007E150C161C00FE01005BED787048EC3FE00038EC0F
802B467BC433>I<EB03F8EA01FFA3380007F013031307A214E0A2130FA214C0A2131FA2
1480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120F
A25BA2121FA25BA2123FA290C7FCA248136014E0007E13C0A2130100FE138012FCA21303
007C13005B1306EA3E0EEA1E1CEA0FF8EA03E015467CC41D>I<01F8EB03FCD803FEEB1F
FFD8071F90387C0FC03B0E0F80E007E03A0C07C3C003001CD9C7007F001801CE13010038
01DC80003013D8EB0FF800705B00605BA200E0491303D8C01F5D5C12001607013F5D91C7
FCA2160F495D137E161F5F13FE49143F94C7FC187000014B136049147E16FE4C13E00003
17C049150104F81380170300071700495D170EEE781C000FED7C3849EC1FF0D80380EC07
C0342D7DAB3A>110 D<D903E0EB3F80D90FF8EBFFE0903A1C7C03C0F8903A383E07007C
9026703F1E137E9026601F387F5D01E00160EB1F8001C013E04A5A00014A14C0018090C7
FCA200035B1300147EC7FC02FE143FA25CA20101157F18805CA2010315FF18005C5F0107
14015F4A13035F010F14075F4C5A5F496C495A4CC7FC02B8137E02985B90393F9C01F891
388F07E0913803FF80DA00FCC8FC4990C9FCA2137EA213FEA25BA21201A25BA21203A212
07B512F0A25C323F83AB31>112 D<01F8EB0FC0D803FEEB7FF0D8070FEBF038000E9038
83C07C3A0C07C701FC001C13CE0018EBDC03003813D8003013F8D90FF013F800709038E0
00E0006015005C12E0EAC01F5C1200A2133F91C8FCA35B137EA313FE5BA312015BA31203
5BA312075BA3120F5BEA0380262D7DAB2C>114 D<EC0FF0EC7FFE903901F00F80903907
8001C049C712E0011E14605BED01F0491307A201F8EB0FE05B7FED03806D90C7FC7F7F14
F86DB47E15E06D13F86D7F01077F1300EC07FF140081ED3F80151F120E003FEC0F00487E
A25D48C7121EA200FC5C12605D00705C6C495A6CEB07C0260F803FC7FC3803FFFC38007F
E0242D7BAB2E>I<133ED9FF8014E02603C3C0EB03F0380703E0380601F0000E1507121C
D818035D12380030150FA2D870075D00605B161FEAE00F00C0495CEA001F4A133FA2013F
92C7FC91C7FC5E5B017E147EA216FE13FE495CA20301EB01801703484802F81300A25F03
03130616F000001407030F130E6D010D130C017C011D131C033913186D9038F0F838903A
1F03C07870903A07FF803FE0903A01FC000F80312D7DAB38>117
D<013E140ED9FF80EB3F802603C3C0137F380703E0380601F0120E121CD81803143F0038
151F0030150FA2D87007140700605BA2D8E00F150000C0497FEA001F4A5B1606133F91C7
FC160E49140C137EA2161C01FE14185B1638163016704848146016E05E150100005D1503
6D49C7FC1506017C130E017E5B6D137890380F81E06DB45AD900FEC8FC292D7DAB2F>I<
013E1738D9FF80D901C013FC2603C3C0903907E001FE380703E0380601F0000E150F001C
16C0D8180316000038187E0030031F143E00705ED86007171E5C163FD8E00F92C7121C00
C049160CEA001F4A49141C047E1418133F91C7FC04FE1438491730017E5CA20301157001
FE1760495C19E019C0A24949481301198018031900606D0107140670130E017C010F5C01
7E010C1418013ED91CFC13386DD9387E13F0903B0FC0F01F01C0903B03FFC00FFF809028
007F0001FEC7FC3F2D7DAB46>I<02FCEB07E0903A03FF801FFC903A0F07C0781E903A1C
03E0E01F903A3801F1C07FD9700013804901FB13FF4848EBFF00495B000316FE90C71438
484A130012061401000E5C120CC7FC14035DA314075DA3140F5DA3021F143817305D1770
023F1460121E003F16E0267F807FEB01C0026F148000FF01EF1303D901CFEB070000FE90
3887C00E267C03835B3A3C0F01E0783A1FFC00FFE0D803F0EB3F80302D7EAB37>I<133E
D9FF8014E02603C3C0EB03F0380703E0380601F0000E1507001C16E0EA18031238003015
0F007016C0EA60075C161FD8E00F158000C05BEA001F4A133F1700133F91C7FC5E49147E
137EA216FE01FE5C5BA215015E485AA215035EA200001407150F6D5C017C131F153F6D13
FF90391F03CFC0903807FF8F903801FC0F90C7121F5EA2153F93C7FCD807C05BD81FE013
7E5DA24848485A4A5A01805B39380007C00018495A001C49C8FC6C137C380781F83803FF
E0C66CC9FC2C407DAB30>I E /Ft 34 124 df<EA01FCEA07FF4813804813C04813E048
13F014F8B5FCA214FCA314FEA27EA27E7E6C13BE6C133EEA01FCC7FCA2147E147CA314FC
14F8A2130114F01303A2EB07E0A2EB0FC0A2EB1F80EB3F005B13FE485A485A485A485A5B
6C5A6CC7FC173174E32D>39 D<EA01FCEA07FF4813804813C04813E04813F0A2B512F8A7
6C13F0A26C13E06C13C06C13806C1300EA01FC151574942D>46 D<16F04B7E1507151F15
3FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3B3B3B3007FB91280A6395E74DD
51>49 D<913801FFF8021FEBFFC091B612F8010315FF010F16C0013F8290267FFC0114F8
9027FFE0003F7F4890C7000F7F48486E7FD807F86E148048486E14C048486E14E048486F
13F001FC17F8486C816D17FC6E80B56C16FE8380A219FFA283A36C5BA26C5B6C90C8FCD8
07FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0A294B512C019804C14004C5B604C
5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90C8FC4B5AED1FF84B5A4B5A4B
48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9FC02FE16FE495A495A4948ED
01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5ABAFCA219F0A4405E78DD51>
I<92B5FC020F14F8023F14FF49B712C04916F0010FD9C01F13FC90271FFC00077FD93FE0
01017F49486D8049C86C7F484883486C6F7F14C0486D826E806E82487FA4805CA36C5E4A
5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91C7FC604C5B4C5B4C5B4C5B047F13
8092260FFFFEC8FC020FB512F817E094C9FC17F817FF91C7003F13E0040713F8040113FE
707F717F7113E085717FA2717F85A285831A80A31AC0EA03FCEA0FFF487F487F487FA2B5
7EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F000F5ED807FE92B55A6C6C6C
4914806C01F0010791C7FC6C9026FF803F5B6D90B65A011F16F0010716C001014BC8FCD9
001F14F0020149C9FC426079DD51>I<F01F804E7E187F18FFA25F5F5F5FA25F5F5FA294
B5FC5E5E5EA25E5EEE3FBFEE7F3FA216FEED01FCED03F8ED07F0A2ED0FE0ED1FC0ED3F80
16005D15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24AC7FC14FE495A5C1303495A495A495A5C
133F49C8FC13FE485AA2485A485A485A5B121F485A48C9FC12FEBCFCA6CA6CEBC000B103
7FB8FCA6485E7CDD51>I<01C0EE01C0D801F8160F01FF167F02F0EC07FFDAFF8090B5FC
92B7128019006060606060606095C7FC17FC5F17E0178004FCC8FC16E09026FC3FFCC9FC
91CBFCADED3FFE0203B512F0020F14FE023F6E7E91B712E001FDD9E00F7F9027FFFE0003
7F02F801007F02E06EB4FC02806E138091C8FC496F13C04917E07113F0EA00F090C914F8
A219FC83A219FEA419FFA3EA03F0EA0FFC487E487E487FA2B57EA319FEA35C4D13FC6C90
C8FC5B4917F8EA3FF001804B13F06D17E0001F5E6C6C17C06D4B1380D807FC92B512006C
6C4A5B6C6C6C01075B6C01E0011F5BD97FFE90B55A6DB712C0010F93C7FC6D15FC010115
F0D9003F1480020301F0C8FC406078DD51>I<F00FE04E7EA24E7EA34E7EA24E7EA34D7F
A24D80A24D80A34D80A24D80A34D80A2DD7FBF7FA2181F05FF8017FE04016D7FA24D7E04
038217F804076D80A24D7E040F8217E0041F6D80A24D7F043F825F047F6E7FA294C77E4C
825E03016F7FA24C800303845E03076F80A24C80030F845E031F6F80A24C81033F845E03
7F707F93B9FCA292BA7EA24A85A203FCC912070203865D020771805D86020F864B82021F
865D87023F864B83027F8692CBFC874A864A840101875C496C728090381FFFC0B700E092
B812FEA66F647BE37A>65 D<4DB5ED03C0057F02F014070407B600FE140F047FDBFFC013
1F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF814A02F0020113
C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B548824902808249
91CB7E49498449498449498449865D49498490B5FC484A84A2484A84A24891CD127FA25A
4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380A27EA2F50FC0A26C7FA37E6E1A
1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F4E5A7F6D6D4E5A6D6D4E5A6D6D
4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC020F01FFEE07FE6E02C0ED1FF8
020102F8ED7FF06E02FF913803FFE0033F02F8013F1380030F91B648C8FC030117F86F6C
16E004071680DC007F02F8C9FC050191CAFC626677E375>67 D<B96C020FB612FCA6D800
0102C0CA003FEBF0000A0390C7FC525A525AF41FF0525A525A525A090390C8FC515AF30F
F8515A515A515A50485A5090C9FC505AF20FF8505A505A505A4F485A4F90CAFCF107FC4F
5A4F5A4F5A4F5A4E485A4E90CBFCF007FC4E5A4E7E4E7E18FF4D7F4D805F4D804D804D80
94B6FC04C181DCC3FE809326C7FC7F7F9338CFF83F9326DFF01F7FDCFFE0814D6C804D7E
DCFE00814C6D804C7F4C6D804C824C6E7F85737F8873808588738085738088747F86747F
8974808689748086748089757F87757F8A7580878A7580090F14FCB96C010FB8FCA67062
7AE17E>75 D<B700E0040FB7128082828282A2D800016EDC000101FCC7FC719338001FC0
8383A28302FD808302FC80816F7F6F806F8084816F806F806F8084707F82708070808570
80827080708085717F83718071807180868371807180727F867280847280728087728084
7280737F87731480857314C07314E01CF07314F8857314FC7413FE7413FF1D9F867414DF
7414FF86A286868787A287878787A28787888888A288888890261FFFC084B712F8881D7F
1D3F1D1F775A71627AE17E>78 D<BA12F8F1FFE01AFEF2FFC01BF01BFED800010280C76C
7F070714C0070014F0747F081F7F747F747F7480A2748089A37480A389A865A3505CA265
A2505C9AC9FC505B505B505B087F5B4FB55A0707148096B548CAFC93B812F81BC050CBFC
621AFF932680000314C0DE007F7F071F13F8737F737F737F73808885888688A2747FA688
A688A676140FF71F80A374801F3F86771400745E746E5BB96E6E5B746E485A75EBFE0709
1F90B55A090715E009015DCF003F91C7FC0A0013FC71647AE178>82
D<DBFFFCEC01E0020FD9FFE01303027F02FC130749B7130F0107EEC01F011F16F049D9C0
07EBF83F4948C7383FFE7FD9FFF8020FB5FC4801E014014849804849153F91C97E484882
001F834982003F83845B007F187FA2193FA200FF181FA27F190FA27FA26D17078080806C
01F893C7FC80ECFF8015F86CECFFC016FC6CEDFFE017FE6CEEFFE018F86C17FE6C717E6C
846C846D17F86D836D836D8313036D18806D6C17C0020F17E01401DA000F16F015000407
15F8EE007F1703050014FC183F84060713FE84A2007C8300FC83A2197FA3193F7EA31AFC
7EA27F1AF86D177F7F1AF06D17FF6D18E06D5E01FF18C06E4B138002E04B130002F84B5A
02FFED3FFC01CF01E0ECFFF8018301FF010F5B010191B65A6D6C5E48011F93C7FC480103
15FC48D9003F14E048020149C8FC476677E35A>I<001FBEFCA64849C79126E0000F1480
02E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181FA400
7E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>I<913803FF
FE027FEBFFF00103B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF80101
7F486D6D7F717E486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6
FC157F0207B7FC147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B48
13F85A5C485B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C
01FED90FE114FF6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F0
01011400D9001F90CBFC49437CC14E>97 D<92380FFFF04AB67E020F15F0023F15FC91B7
7E01039039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC4948
4A13F0A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FC
AE7EA280A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6D
EC1FC06D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F
5D020F1580020102FCC7FCDA000F13C03E437BC148>99 D<F17FF8050FB5FCA6EF000F84
84B3A892380FFF804AB512F8020F14FE023FECFF8391B712E301039138807FF3499039F8
000FFB011F01E00103B5FC494913004990C87E49488148498148834A815A485BA2485BA2
5AA3485BA4B5FCAE7EA46C7FA37EA26C7FA26C5F806C5F6C6D5D6C6D5D017F93B5FC6D6C
6C0103806D6D49806D01F0D91FF7EBFFFE6D9039FE01FFE7010190B612876D6CECFE0702
1F14F8020314E09127003FFE00ECC0004F657BE35A>I<92380FFFC04AB512FC020FECFF
80023F15E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C7
6C7F49486E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9
FCA41A0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE
6C17016D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7
FC6D6C90B55A021F15F8020715E0020092C8FC030713F041437CC14A>I<F107F8DB7FFE
EC3FFE020FB5D8F001B5FC027FDAFE03148049B7128F49DCDFFD13C0010FD9F00FEBFFC1
49D9800114014990C7EBFC0349486E6C7E4948EC3FFF48496E018113800780130048F0C0
3E97C7FC48496E7FA34884A96C60A36C6D4A5BA26C60A26C6D4A90C8FC6D6C4A5A6D6C4A
5A6D6D485BDBF00F5B4990B612C060D97C7F4AC9FCD9FC0F14F09126007FFECAFC92CCFC
1201A47FA27F8014F091B77E18FE6CEFFFC019F06D17FC19FF6D846D846D846D84013F84
90BAFC0003854801E0C712014890C9000F7F484816014848EE007F4848717E8512FF5B85
A56D5F007F616D173F003F616D177F6C6C4D5A6C01C003035B6C6D4B5B6C01F8031F5BC6
01FF92B5C7FC6D01F8011F5B011F90B712F8010717E0010094C8FC020F15F0DA003F01FC
C9FC4A607CC151>103 D<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94B512F0040714FC
041F14FF4C8193267FE07F7F922781FE001F7FDB83F86D7FDB87F07FDB8FC0814C7F039F
C78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A651647BE35A>I<EB0F
E0EB3FF8497E48B5FCA24880A24880A76C5CA26C91C7FCA238007FFC6D5AEB0FE090C9FC
AF903807FF80007FB5FCA6C6FC7F7FB3B3AEB712C0A622657BE42C>I<ED01FCED07FF4B
1380033F13E0A24B13F0A292B512F8A76F13F0A26F13E0A2030F13806F1300ED01FC92C8
FCAFEEFFF8021FB5FCA6EC000F8181B3B3B3AAEA07F0EA1FFC487E487EB56C4813F0A317
E05D17C05D17806C4948130049495A6C48495A261FFE0313F06CB65A6C158000014AC7FC
6C6C13F8010713802D8288E431>I<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712E0A6
23647BE32C>108 D<902607FF80D91FFFEEFFF8B691B500F00207EBFF80040702FC023F
14E0041F02FF91B612F84C6F488193267FE07F6D4801037F922781FE001F9027E00FF000
7FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F6DD98FC0DBF87EC7804C6D027C8003
9FC76E488203BEEEFDF003BC6E4A8003FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7
D8F007B7D8803FB612FCA67E417BC087>I<902607FF80EB1FFFB691B512F0040714FC04
1F14FF4C8193267FE07F7F922781FE001F7FC6DA83F86D7F6DD987F07F6DD98FC0814C7F
039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A651417BC05A>I<
923807FFE092B6FC020715E0021F15F8027F15FE494848C66C6C7E010701F0010F13E049
01C001037F49496D7F4990C87F49486F7E49486F7E48496F13804819C04A814819E04849
6F13F0A24819F8A348496F13FCA34819FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A2
6C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C6D4B13006D6C4B5A6D6D495B6D6D49
5B010701F0010F13E06D01FE017F5B010090B7C7FC023F15FC020715E0020092C8FC0307
13E048437CC151>I<902607FF80EBFFF8B6010FEBFF80047F14F00381B612FC038715FF
038F010114C09227BFF0003F7FC6DAFFC0010F7F6D91C76C7F6D496E7F03F86E7F4B6E7F
4B17804B6F13C0A27313E0A27313F0A21BF885A21BFCA3851BFEAE4F13FCA41BF861A21B
F0611BE0611BC06F92B512801B006F5C6F4A5B6F4A5B03FF4A5B70495B04E0017F13C092
26CFFC03B55A03C7B648C7FC03C115F803C015E0041F91C8FC040313E093CBFCB3A3B712
F0A64F5D7BC05A>I<D90FFFEB0FFCB690383FFF8093B512E04B14F04B14F8923907FC7F
FC92390FE0FFFEC6EC1F806DD93F0113FF6D133E157E157C15F8A215F07013FEA24BEB7F
FCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A638417BC042>114
D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0014890C7121F
D80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D92C7FC13FF14
E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F1680010F16C0
1303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC81177F6C163FA217
1F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002C0EB0FFE02FC
EB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437BC140>I<EC07
E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91B512FEB8FCA5
D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D137E6D6D5B6DEB
FF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<902607FFC0ED3F
FEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D147E4E7F6D6D49
48806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8DA003F018002
F0C7FC51427BC05A>I<B700C00103B512FCA6C66C01C0C8381FFE006D6DED07F0A26D6D
5E190F6D6D5E191F6D606F153F6D95C7FC6F5DA26D6D157E19FE6D6E5C18016E5E701303
6E5E701307A26E6D5C180F6E6D5C181F6E6D5C183F6E93C8FC705BA26E6D13FEA26E6E5A
17816FEBC1F817C36F5C17E76F5C17FFA26F5CA26F5CA26F91C9FCA26F5BA36F5BA2705A
A2705AA2705AA2705A4E417DBF55>I<B70081B600FC0103B512FCA6C66C0180C701FCC8
381FFE006F6FED03F86D047F5F856F6E16076D646F70140F6D705F866F6E161F6D646F4A
6D143F6D99C7FC4E7F6F616D1B7E6F4A6D14FE6D6395B57E7001FC15016E62DCC0016E13
036EDBF87F5D05038004E0496C14076E62DCF007ED800F6E4B6C5D050F15C004F8496C14
1F6E62DCFC1FEDE03F6E4B6C92C8FC053F15F004FE496C5C6E197E7048EDF8FE6E027E6D
5C05FE15FC4D6D13FD6F601BFF6F496E5BA24D806F60A26F496E5BA24D806F60A26F496E
90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>I<BDFCA5500580A951>123
D E /Fu 81 124 df<ED1FFC4AB512C0913907F007F091391F8000FC027EC7123F4948EC
1FC0D903F0EC07E049486E7E49486E7E49486E7E49C9127E49167F01FE707E4848707E00
038449160F000784491607000F84A24848707EA2003F84491601A2007F84A34982D98180
15C000FF1980A291B7FCA70280C8FCA30180CAFC007F19006D5EA3003F60A26D1603001F
60A2000F606D16070007606D160F0003606D161F0001606C6C4C5A017F4CC7FCA26D6C15
FE6D6C4A5AD907E0EC03F06D6C4A5AD901FCEC1FC0D9007E4AC8FCDA1F8013FC913907F0
07F00201B512C09126001FFCC9FC41487BC54C>2 D<BBFCA300010180C700011380D800
7FEEFE00B3B3B3A62601FFE0913807FF80B6D8C003B6FCA340447CC349>5
D<ED7FF0020FB57E91393FC01FE09139FE0003F8D903F8EB00FED90FE0EC3F8049486E7E
D97F80EC0FF049C86C7E48486F7E48486F7E00078349814848EE7F80A2001F18C049163F
003F18E0A34848EE1FF0AA6C6CEE3FE0A4001F18C06D167F000F1880A26C6CEEFF00A200
035F6D150100015F00005F6D1503017E5E017F15076D5E6D5E6E140F010F5E010793C7FC
6E5C0103151E00C018186D6C5CA2D86000033813306E147802701470A200700130026013
70003018600038013802E013E0263FFFF891B5FCA36C18C0A33D467CC546>10
D<9239FFC001FC020F9038F80FFF913B3F803E3F03C0913BFC00077E07E0D903F890390F
FC0FF0494890383FF81F4948EB7FF0495A494814E049C7FCF00FE04991393FC003804902
1F90C7FCAFB912F0A3C648C7D81FC0C7FCB3B2486CEC3FF0007FD9FC0FB512E0A33C467E
C539>I<4AB4FC020F13E091387F80F8903901FC001C49487FD907E0130F4948137F011F
ECFF80495A49C7FCA25B49EC7F00163E93C7FCACEE3F80B8FCA3C648C7FC167F163FB3B0
486CEC7FC0007FD9FC1FB5FCA330467EC536>I<913801FFC0020FEBFB8091387F803F90
3801FC00494813FFEB07E0EB1FC0A2495A49C7FC167F49143F5BAFB8FCA3C648C7123FB3
B2486CEC7FC0007FD9FC1FB5FCA330467EC536>I<DBFF80EB3FE0020F9039F001FFFC91
3B3F807C0FF01F913CFC000E3F800380D903F86D48486C7E4948D90FFC804948D93FF813
0F4948017F4A7E49485C49C75BA25B494B6D5A041F6E5A96C8FCACF107F0BBFCA3C648C7
391FC0001F190F1907B3B0486C4A6C497E007FD9FC0FB50083B512E0A34B467EC551>I<
001EEB03C0397F800FF000FF131F01C013F8A201E013FCA3007F130F391E6003CC0000EB
000CA401E0131C491318A3000114384913300003147090C712604814E0000614C0000E13
0148EB038048EB070048130E0060130C1E1D7DC431>34 D<121EEA7F8012FF13C0A213E0
A3127FEA1E601200A413E013C0A312011380120313005A1206120E5A5A5A12600B1D78C4
1B>39 D<140C141C1438147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B1201
5B1203A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA312FCB3A2127CA3127EA412
3EA2123FA27EA36C7EA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C013
01EB00E014701438141C140C166476CA26>I<12C07E12707E7E7E120F6C7E6C7EA26C7E
6C7EA21378137C133C133E131E131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8
A41300A314FCB3A214F8A31301A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A213
1E133E133C137C13785BA2485A485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<16
C04B7EB3AB007FBAFCBB1280A26C1900C8D801E0C9FCB3AB6F5A41407BB84C>43
D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A
1206120E5A5A5A12600B1D78891B>I<B612C0A61A067F9721>I<121EEA7F80A2EAFFC0A4
EA7F80A2EA1E000A0A78891B>I<14FF010713E090381F81F890383E007C01FC133F4848
EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8
FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB
07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090
C7FC28447CC131>48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E49
7E007FB6FCA3204278C131>I<EB03FE90381FFFC0017F13F03901F80FFC3903C001FE48
486C7E000EC7EA7F8048EC3FC0ED1FE04815F00030140F007015F800601407126CB415FC
7F7F1503A46C4813076CC7FCC8FC16F8A2150F16F0151F16E0A2ED3FC0ED7F8016005D5D
4A5A4A5A4A5A5D4A5A4A5A4AC7FC147C5C5C495A495A495A49C7120C131E5B013814185B
5B485A4848143848C81230000E1570001FB612F0A25A5AB712E0A326427BC131>I<49B4
FC010F13E0013F13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0
EA0FE0486C14F8A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F00
15FE4A5AEC03F0EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0
ED07F816FC150316FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC0070
1407003015F80038140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE003900
7FFFF8010F13E0010190C7FC28447CC131>I<ED0380A21507150FA2151F153FA2157F15
FFA25CEC03BF153F14071406140C141C141814301470146014C013011480EB03005B1306
5B131C13185B1370136013E0485A5B120390C7FC1206120E120C5A123812305A12E0B812
C0A3C8383F8000ADEDFFE0027FEBFFC0A32A437DC231>I<000615C0D807C0130701FCEB
7F8090B612005D5D5D15E0158026063FFCC7FC90C9FCAE14FF010713C090381F01F09038
3800FC01F0137ED807C07F49EB1F8016C090C7120F000615E0C8EA07F0A316F81503A216
FCA5123E127F487EA416F890C712075A006015F0A20070140F003015E00038EC1FC07E00
1EEC3F806CEC7F006C6C13FE6C6C485A3901F807F039007FFFE0011F90C7FCEB07F82644
7BC131>I<EC07FCEC3FFF91B512C0903903FC03E0903907E000F0D91FC0133849C71258
017EEB01FC01FE1303491307485A485AA24848EB03F8000FEC01F092C7FC485AA3485AA3
127FA29038007F80903801FFF090380780FC39FF0E003E49EB1F8049EB0FC049EB07E013
6001E0EB03F04914F8150116FC5BED00FEA390C812FFA47EA57F123FA216FE121F15016D
14FC120FED03F86C7EED07F06C6C14E06C6CEB0FC06C6CEB1F80017EEB3F0090383F80FE
90380FFFF8010313E00100138028447CC131>I<121CA2EA1F8090B712C0A3481680A217
005E0038C8120C0030151C00705D0060153016705E5E4814014B5A4BC7FCC81206150E5D
151815385D156015E04A5AA24A5A140792C8FC5CA25C141E143EA2147E147CA214FCA213
01A3495AA41307A6130FAA6D5AEB01C02A457BC231>I<14FF010713E0011F13F890387F
00FE01FC133FD801F0EB1F804848EB0FC049EB07E00007EC03F048481301A290C713F848
1400A47FA26D130116F07F6C6CEB03E013FC6C6CEB07C09039FF800F806C9038C01F006C
EBF03EECF87839007FFEF090383FFFC07F01077F6D13F8497F90381E7FFFD97C1F138049
6C13C02601E00313E048486C13F000079038007FF84848EB3FFC48C7120F003EEC07FE15
0148140016FF167F48153FA2161FA56C151E007C153EA2007E153C003E157C6C15F86DEB
01F06C6CEB03E06C6CEB07C0D803F8EB1F80C6B4EBFF0090383FFFFC010F13F001011380
28447CC131>I<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F8048
48EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FF
A46C5CA36C7E5D121F7F000F5C6C6C1306150E6C6C5B6C6C5BD8007C5B90383F01E09039
0FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F
16C0ED1F80A249EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649
C7FCEB1FF028447CC131>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121EEA
7F80A2EAFFC0A4EA7F80A2EA1E000A2B78AA1B>I<121EEA7F80A2EAFFC0A4EA7F80A2EA
1E00C7FCB3A5121E127FEAFF80A213C0A4127F121E1200A512011380A3120313005A1206
120E120C121C5A5A12600A3E78AA1B>I<007FBAFCBB1280A3CEFCB0BB1280A36C190041
187BA44C>61 D<EB0FFC90387FFFC03901F007F039078001FC000EC77E48147F48EC3F80
4815C00060141F00FE15E07E7FA56CC7FC001CEC3FC0C8FCED7F80A2EDFF004A5AEC03F8
4A5A5D4A5A4A5A92C7FC143E143C5CA2147014F05CA25C1301A35CA990C9FCAAEB03C0EB
0FF0A2497EA46D5AA2EB03C023467BC52E>63 D<16C04B7EA34B7EA34B7EA34B7EA3ED19
FEA3ED30FFA203707FED607FA203E07FEDC03FA2020180ED801FA2DA03007F160FA20206
801607A24A6D7EA34A6D7EA34A6D7EA20270810260147FA202E08191B7FCA249820280C7
121FA249C87F170FA20106821707A2496F7EA3496F7EA3496F7EA201788313F8486C83D8
0FFF03037FB500E0027FEBFFC0A342477DC649>65 D<B8FC17E017FC00019039C00003FF
6C6C4801007FEF3FC0717E717E717E84170384170184A760A21703601707604D5A4D5AEF
7FC04DC7FCEE03FEEE3FF091B65A17FC0280C7B47EEF1FC0EF0FF0717E717E717E717E19
80187F19C0A2183F19E0A8F07FC0A2198018FF4D1300A24D5AEF0FFC4D5AEF7FE048486C
903803FFC0B9C7FC17FC17C03B447CC345>I<DB0FFE146092B500C013E0020314F0913A
0FFC01FC0191393FC0003E02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF494815
7F4948153F4948151F49C9120F485A491607120348481603A248481601A248481600A212
3FA2491760127FA31900485AAE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C16
0119806C6C160312016DEE07006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D6C
4A5AD900FFEC0780DA3FC0011FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B48
7BC546>I<B8FC17F017FC00019039C00007FF6C499038007FC0017FED1FE0EF07F0EF03
FC717E717E84727E727E727EA2727E85180385A2180185A38584A31A80AD1A00A36061A3
61180361180761180F614E5A183F614EC7FC18FEEF03FC4D5AEF1FE001FFED7FC0486DD9
07FFC8FCB812FC17F094C9FC41447CC34B>I<B912F8A3000101C0C7127F6C6C48EC07FC
17011700187C183C181CA284A31806A4180704067FA395C7FCA4160EA2161E163E16FE91
B5FCA3EC8000163E161E160EA21606A319C0A3F0018093C7FCA41803A21900A260A260A2
181EA2183E187EEF01FE170748486C147FB95AA33A447CC342>I<B912F0A3000101C0C7
127F6C6C48EC0FF817031701170018781838A2181CA3180CA4180E1806160CA21800A516
1CA2163C167CED01FC91B5FCA3EC8001ED007C163C161CA2160CA793C8FCB08048487EB6
12F8A337447CC340>I<DB0FFE146092B500C013E0020314F0913A0FFC01FC0191393FC0
003E02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948151F
49C9120F485A491607120348481603A248481601A248481600A2123FA2491760127FA396
C7FC485AAD4CB612C06C7EA293C7387FF000725A003F171F7FA2121F7F120FA26C7EA26C
7E6C7EA26C7E6D7E6D6C153F6D7E6D6C157F6D6C15E7D903FEEC01C7D900FFEC0383DA3F
E0EB0F01DA0FFCEBFE000203B500F81360020002E090C7FCDB0FFEC9FC42487BC54D>I<
B6D8C003B6FCA3000101E0C70007138026007F80913801FE00B3A991B7FCA30280C71201
B3AC2601FFE0913807FF80B6D8C003B6FCA340447CC349>I<B612F0A3C6EBF0006D5A6D
5AB3B3B3A4497E497EB612F0A31C447DC323>I<B600C049B512C0A3000101E0C8387FFC
006C49ED3FE06D481680063EC7FC183C183860604D5A4D5A4DC8FC171E17385F5F4C5A4C
5A4CC9FC160E5E5E5E5E4B5A4B7E4B7E150F4B7E4B7E1577EDE3FE913881C1FFEC8381DA
87007F028E6D7E149C02B86D7E02F06D7E14C04A6D7E707EA2707E707EA2707F717EA271
7E717EA2717E717EA2717E717EA2717F8585496C82486D4A13FCB600C0011FEBFFE0A343
447CC34C>75 D<B612F8A3000101E0C9FC6C6C5A5CB3B31830A418701860A518E0A3EF01
C0A217031707A2170F173F177FEE01FF48486C011F1380B9FCA334447CC33D>I<B56C93
3807FFFC6E5EA20001F1FE0026006FE0EE1BF8A3D967F01633A2D963F81663A3D961FC16
C3A3D960FEED0183A2027FED0303A36E6C1406A36E6C140CA26E6C1418A36E6C1430A36E
6C1460A26E6C14C0A36E6CEB0180A3037FEB0300A292383F8006A36F6C5AA36F6C5AA26F
6C5AA36F6C5AA36F6C5AA26FB45AA370C7FC13F0A2486C143ED80FFFEF0FFEB500F0011C
0107B512FCA34E447BC359>I<B56C020FB5FC8080C6040013F06D6CED1F80D96FF8ED0F
00A2D967FC1506EB63FEA2EB61FF01607FA26E7E6E7EA26E7E6E7EA26E7E6E7EA26E7E6E
7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0EE0FF8
A2EE07FCEE03FEA2EE01FF701386A2EF7FC6EF3FE6A2EF1FF6EF0FFEA217071703A21701
1700A201F0167E183E487ED80FFF161EB500F0150EA2180640447CC349>I<ED1FFC4AB5
12C0913907F007F091391F8000FC027EC7123FD901F8EC0FC049486E7E49486E7E49486E
7E49486E7E49C9127E017E8201FE834848707E4848707EA24848707EA2000F8449160300
1F84A24848707EA3007F84A24982A300FF1980AD6C6C4C1300A4003F606D1603A2001F60
A26C6C4C5AA26C6C4C5AA20003606D161F6C6C4C5A000060017F4CC7FC6E5D013F5E6D6C
4A5AD907E0EC03F06D6C4A5AD901FCEC1FC0D9007E4AC8FCDA1F8013FC913907F007F002
01B512C09126001FFCC9FC41487BC54C>I<B712FCEEFFC017F800019039C0000FFC6C6C
48EB01FF9338007F80EF1FE0170FEF07F018F8EF03FCA218FE1701A218FFA718FEA21703
18FCA2EF07F818F0EF0FE0EF1FC0EF7F80933801FE00EE0FFC91B612F017800280C9FCB3
AA3801FFE0B612C0A338447CC342>I<B712E016FF17C000019039C0003FF86C6C48EB03
FCEE00FF717E717E717E717E717EA284170384A760A21707604D5AA24D5A4D5A4DC8FCEE
01FEEE07F8EE3FE091B6C9FC16FC913980007F80EE0FE0707EEE03FC707E160083717EA2
717EA784A71A6084171FA21AE0716C13C02601FFE002071301B600C01680943801FC0394
3900FE0700CBEA3FFEF007F843467CC348>82 D<49B41303010FEBE007013F13F89039FE
00FE0FD801F8131FD807E0EB079F49EB03DF48486DB4FC48C8FC4881003E81127E82127C
00FC81A282A37E82A27EA26C6C91C7FC7F7FEA3FF813FE381FFFE06C13FE6CEBFFE06C14
FC6C14FF6C15C0013F14F0010F80010180D9001F7F14019138001FFF03031380816F13C0
167F163F161F17E000C0150FA31607A37EA36C16C0160F7E17806C151F6C16006C5D6D14
7ED8FBC05CD8F9F0495AD8F07C495A90393FC00FE0D8E00FB51280010149C7FC39C0003F
F02B487BC536>I<003FB912F8A3903BF0001FF8001F01806D481303003EC7150048187C
0078183CA20070181CA30060180CA5481806A5C81600B3B3A54B7EED7FFE49B77EA33F44
7DC346>I<B600C0010FB5FCA3000101E0C813F026007F80ED1F80F00F00A21806B3B3A7
180E6D6C150CA2181C131F6E1518010F163818306D6C1570606D6C14016D6C5D6D6CEC07
80027F4AC7FC6E6C131EDA1FE0137C913907FC03F00201B55A6E6C1380DB07FCC8FC4046
7CC349>I<B692383FFFF0A3000301E003071300C649ED01FC4A5E017F705A6E5E133F61
6E1501011F5FA26D6C4BC7FCA28001071606A26E150E0103160CA26D6C5DA2806D5EA26F
1470027F156081023F5DA281021F4A5AA26F1303020F92C8FC8102071406A26F130E0203
140CA26E6C5BA2816E5CA2EE8070037F1360A26F6C5AA216E092381FE180A216F3030F90
C9FC16FBED07FEA36F5AA36F5AA26F5AA3166044467EC349>I<B60107B500F890380FFF
FEA3000301E0D9001F90C813F06C0180DA0FFCED3FC091C86C48ED1F006C871C0E6D6C6E
7E1C0CA26D6C6F5DA36EDA06FF1538011F1A30A26E020E6D1470010FDB0C7F1560A26E02
1C7F0107DB183F5DA2856D6CDA301F4A5AA36D6C4A6C6C49C7FCA36D6C4A6C6C1306A3DB
80016E130E027FDA8003140CA2DBC00380023FDA00015CA203E081021F01066D5CA36E6C
486E6C5AA36E6C486E6C5AA36F48EC1FE1020360A2DBFE7015F302010160020F90C8FCA2
DBFFE015FB6E49EC07FEA36F486E5AA36FC86C5AA3031E6F5AA4030C16605F467EC364>
I<B66C91380FFFFCA3000101F8C8000313C026007FE0923800FE0061013F17F06D6C5E80
010F5F6D6C4B5A18036D6C93C7FC6E15066D160E6D6D140C181C6E6C14186E6C5C18706E
6C146018E06E6C5C6E6C495A17036E6C91C8FC5F6E6C13066E6D5A171C92387FC0185FED
3FE06F6C5A17E06F6C5AEEF980ED07FF6F90C9FCA26F5AB3A6923807FF800203B6FCA346
447FC349>89 D<EAFFFCA4EAF000B3B3B3B3B3A2EAFFFCA40E6476CA1B>91
D<01C01318000114384848137048C712E0000EEB01C0000C1480001C1303001814000038
5B003013060070130E0060130CA300E0131C481318A400CFEB19E039FFC01FF801E013FC
A3007F130FA2003F130701C013F8390F0001E01E1D71C431>I<EAFFFCA4EA003CB3B3B3
B3B3A2EAFFFCA40E647ECA1B>I<EB07FC90383FFF809038F80FE03903C003F048C66C7E
000E6D7ED80FC0137E486C137F6D6D7EA36F7EA26C5AEA0380C8FCA4EC0FFF49B5FC9038
0FFE1FEB3FC0EBFF00EA03FC485A485A485A485A127F5B176048C7FCA3153FA36D137F00
7F14EF6D9038C7E0C0003F13013A1FE00783F13B07F81E03FF802701FFFC0113003A001F
E0007C2B2E7CAC31>97 D<EA01FC12FFA3120712031201B3EC03FC91380FFF8091383C07
E091387001F89039FDE0007E02807F01FFEC1F8091C713C049EC0FE049140717F0A2EE03
F8A217FCA2160117FEAB17FC1603A217F8A2EE07F0A26DEC0FE017C06D141F01FBEC3F80
D9F380EB7E00D9E1C05B9039E0F001F89039C03C07E09039801FFF80C7D803FCC7FC2F46
7DC436>I<EC7F80903803FFF090380FC07C90383F000F01FCEB03804848EB01C0000314
0F4848EB1FE049133F120F485AA2485AED1FC0007FEC070092C7FCA290C9FC5AAB7E7FA2
123F16307F001F15706C6C146016E06C6C14C06C6C13010001EC03806C6CEB0700013F13
1E90381FC078903807FFF001001380242E7DAC2B>I<167FED3FFFA315018182B3EC7F80
903803FFF090380FC07C90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2
485AA2127FA290C8FC5AAB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F
806C6C010E13C0013F011C13FE90380FC0F8903803FFE09026007F0013002F467DC436>
I<EB01FE903807FFC090381F03F090387E00FC49137E48487F485A4848EB1F80000F15C0
49130F121F484814E01507A2007F15F090C7FCA25AA390B6FCA290C9FCA67EA27FA2123F
16306C7E1670000F15606D14E06C6C14C0000314016C6CEB03806C6CEB0700013E131E90
381F80F8903803FFE0010090C7FC242E7DAC2B>I<EC0FE0EC7FF8903801F81E903803F0
3F90390FE07F8090381FC0FF5C133F495AA2ED7F0001FE131C92C7FCAFB67EA3C648C8FC
B3B2486C7E007F13FFA321467EC51E>I<EE0F80D901FCEB7FE0903A0FFF81F0F090393F
07E3819039FC01FF033A01F800FE014848017E13E00007027FC7FC497F000F8149131F00
1F81A9000F5D6D133F000792C7FC6D5B0003147E6C6C5B6D485A3903BF07E090380FFF80
260701FCC8FC90CAFCA25AA37F6C7E7F90B512F86C14FF16E06C15F86C6C8048B67E3A07
C0000FFF48481300003FC8EA3F80003E151F48ED0FC0A2481507A56C150F007C1680007E
151F003E16006C153E6C6C5CD807E0495AD801F8EB07E0D8007FEB3F8090261FFFFEC7FC
010113E02C427DAC31>I<EA01FC12FFA3120712031201B3EC01FE913807FFC091381E07
F091383801F802707FECE000D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5
D8F83F13FEA32F457DC436>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCADEA01FC12
FFA3120712031201B3B0487EB512F8A315437DC21C>I<143C14FFA2491380A46D1300A2
143C91C7FCADEC7F80EB3FFFA31300147F143FB3B3AA123E127F39FF807F00A2147EA25C
6C485A383C01F06C485A3807FF80D801FEC7FC195785C21E>I<EA01FC12FFA312071203
1201B3A292381FFFE0A36F1300ED07F816E05E5E030EC7FC5D5D5D5D4A5A4A5A4AC8FC5C
EC3F804A7E14FF9038FDCFE09038FF8FF01407496C7E01FC7F14016E7E81816F7E82151F
6F7E821507826F7E8282486C491380B5D8F81F13F8A32D457DC433>I<EA01FC12FFA312
0712031201B3B3B3A5487EB512F8A315457DC41C>I<D801FC01FFEC1FE000FF010701E0
EBFFFC913B0F03F801E07F913C3C01FC07803F800007903C7000FE0E001FC0000349D97E
1C130F2601FDC0D97F38804A143001FFDA3FF06D7E91C75BA2495DA3495DB3A8486C4A6C
497EB5D8F81FB50003B512E0A34B2C7DAB52>I<3901FC01FE00FF903807FFC091381E07
F091383801F8000701707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A848
6CECFF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80903803FFF090380FC0FC90383E001F
496D7E496D7E48486D7E48486D7E48486D7E000F81A24848147E003F157FA290C87E4816
80A44816C0AA6C1680A26D147F003F1600A2001F157E6D14FE000F5D6D130100075D6C6C
495A6C6C495A6C6C495A013E49C7FC90381FC0FE903807FFF89038007F802A2E7DAC31>
I<3901FC03FC00FF90380FFF8091383C07E091387001F83A07FDE000FE00010180137F01
FFEC3F8091C7EA1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07
F8A217F0160F6D15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE0
91381FFF80DA03FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<91387F8003903903FF
E00790380FE07890393F801C0F90387E000E496D5AD803F8EB039F0007EC01BF4914FF48
487F121F5B003F81A2485AA348C8FCAB6C7EA3123F7F121F6D5C120F6D5B12076C6C5B6C
6C497E6C6C130E013F131C90380FC0F8903803FFE09038007F0091C7FCAEEEFF80033F13
FEA32F3F7DAB33>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF3803F9C00001
5B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26>I<90383FE018
3901FFFC383907E01F78390F0003F8001E1301481300007C1478127800F81438A21518A2
7EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0C614F0011F13F81300
EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15786C14F86CEB01F039
F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<1306A5130EA4131EA3133E
137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4150CAA017E131C017F1318A26D
133890381F8030ECC070903807E0E0903801FFC09038007F001E3E7EBC26>I<D801FC14
7F00FFEC3FFFA300071401000380000181B3A85EA35DA212006D5B017E9038077F80017F
010E13C06D011C13FE90380FC078903803FFF09026007F8013002F2D7DAB36>I<B539F0
01FFFCA3000790C7EA7FE06C48EC1F8000011600160E1200160C017F5CA280013F5CA26E
1370011F146080010F5CA2ECF00101075CA26D6C48C7FCA26E5A01011306A26D6C5AA214
FF6E5AA215B8EC3FB015F06E5AA36E5AA26E5AA36EC8FC2E2C7EAA33>I<B500E0B539E0
3FFF80A30007903C000FFE000FFC00D803FCD903F8EB03F8F001E0120103015D6D800000
60A26D6E13036DD9037E91C7FCA20280017F5B013FD9063F1306A2D91FC06E5AED0C1FA2
D90FE06E5AED180FA2D907F06E5AED3007A2D903F86E5AED6003A2902601FCE06D5AEDC0
0117FCD900FFECFD80ED800017FF027F92C8FC92C77EA26E147E023E143EA2021E143C02
1C141CA2412C7EAA46>I<B539F007FFFCA30003D9C00113C0C6496C1300017F14FC013F
5C6E13E06D7E010F495A6D6C485A02F890C7FC903803FC060101130E6E5A903800FF186E
5AEC3FF05D141F140F6E7E81140FEC0DFCEC19FEEC38FF4A7E9138603F8002C07F010113
1F49486C7E02007F01066D7E010E1303496D7E013C80017C80D801FC1580D80FFE4913C0
B5D8800F13FFA3302B7FAA33>I<B539F001FFFCA3000790C7EA7FE06C48EC1F80000116
00160E0000150C6D141C6D1418A26E1338013F1430A26D6C5BA26E13E0010F5CA26D6C48
5AA2ECF803010391C7FCA2903801FC06A2ECFE0E0100130CA2EC7F18A215B8EC3FB0A2EC
1FE0A36E5AA26E5AA36EC8FCA21406A35CA25CA2123C007E5BB4FC5CA25CEAFE01387C03
80D87007C9FCEA3C1EEA0FFCEA03F02E3F7EAA33>I<003FB612E0A29038C0003F90C713
C0003CEC7F800038ECFF00A20030495A0070495AA24A5A0060495AA24A5A4A5AA2C7485A
4AC7FC5B5C495A13075C495A131F4A1360495A495AA249C712C0485AA2485A485A150148
5A48481303A24848EB07804848131F00FF14FF90B6FCA2232B7DAA2B>I<B9FCA2300280
9B31>I E /Fv 19 119 df[<933807FFFE93B612F80307EDFF80033F16F092B812FE0203
717E020F18E0023F844A9026FE003F14FC91B500C0010780010301FCC70001804901F06E
6C14C04901C06F8092C97E4948708049488590267FFFC06F808190B500F8846F816F845A
81A2486F1880A285A282A24C5CA37E1D0093C8FC7E6D5B6D494B5C6D5B6D5B010301C060
D9007EC95A91CA5DA24F5C6461644F5C96B6C7FC634E5C4E5C4E14E04E5C063F5C95B548
C8FC050314F80407B612E00307B712804B4BC9FC19F885F1FFC01AF86F16FF92C86C14C0
060714F0060114FC7280073F6D7E738073807314F888738085881D807315C0A21DE0861D
F0A21DF8A27414FCA4D93FF01AFEEBFFFC000313FF4880488048804880A24880A2B67EA2
1DFCA45014F8A34B19F07E97B612E05D6C4A19C0A24B4B15806C5C6C49C948150002F84C
5C6C01C0616C6D4C5C6C01F84C5C6C01FE4C5C6D6C6C4B5C6D01F04AB65A6D01FF020792
C7FC6D02F8017F14FC010391B85A010019E0023F1880020F4DC8FC020117F0DA003F1680
030303F8C9FCDB000F49CAFC>95 137 118 262 116 51 D[<0803B500C0EE01F00703B6
00FEEE03F8077FDBFFE015070607B800FC150F063F05FF151F4DBA00E0143F050F07F814
7F053F07FE14FF94BC5B04039326F8000FECC003040F4BC86CEBF007043F03C0030F6D5A
93B648C900036D5A4B03F09339007FFF3F030703C0051F90B5FC4B92CB7E033F02FC1803
4B02F08492B648844A0380193F4A92CD7E4A4A864A4A864A02F0864A4A864A8991B65A49
4B874992CF7E4C885B494A885E498B494A88A2495C8D90B65A8D5A5E48217FA24892D1FC
223FA25A5DA248211FA3485CFA0FF09FC7FCA25AA45DA3B6FCB27EA381A47EA46C80FA07
F0FA0FF87EA2817EA36C6F1D1F23F07E827E223F6D6E1EE0A26D6E1D7F23C06D6E1DFF7F
705213806D806D55130070646D6F646D6F515A6E6E1B1F6E6E515A6E6E515A6E6E1BFF6E
6E505B6E6E505B6E6F4F5B6E03E04F90C7FC6F6EF13FFE6F02FC4F5A030F02FF4E485A6F
03C005075B030103F0051F5B6F03FE057F1380043FDAFFE00303B5C8FC040F03FE033F13
FC0403DBFFF80107B55A040093B812E0053F1A80050F4FC9FC050119F8DD003F18C00607
95CAFCDE007F16F0070393CBFCDF000314C0>141 146 115 271
168 67 D[<000FC312F8A6488EA304C0C7001F4AC7120103F8C8F0000F03C01C0192C973
7E02FC1E1F4A1E0702E08A4A8A4A8A4890CA757EA249203F49201FA349200FA2492007A4
492003007F8EA4498CA848487A1380A6CC99C7FCB3B3B3B3AA030FBD12FCA9>145
140 120 267 162 84 D<93B512FC037FECFFF00207B8FC023F17E091B912F84918FE01
07727E499126C0007F14E04901E0C7000F80496D020380496D020014FE6F6F7F90B57080
6F6F8085486E6F807380A27380A28885886C5CA26D4982886D5B6D5B010713C0010190CA
FC90CCFCA90603B7FC050FB8FC0403B9FC167F0307BAFC153F4AB7EA807F020FEDE00002
3F02FCC7FC91B612E0010392C8FC4914FC011F14F04914C0495C90B548C9FC485C485C48
5C485C5A5D485CA24891CAFCA3B6FC5CA397B6FCA461806C60F107EF6C6E150F6F16CF6C
183F6FDB7F8F806C6EDBFF0F14E06C02FCDA03FE15FE6C6E91260FFC0791B5FC6C6E6CD9
3FF817806C923AF803FFF003013F91B6487E010FEF8000010394C77E010004FC141F021F
03F0140702010380DA007F1400DA000701F8CDFC695F79DD71>97
D<94387FFFF0041FB612E093B712FE0307707E031F17F092B97E4A18FE020784021F9126
F8000F14804A0280010014C04A49C74814E049B500F85C494A17F0494A5C495C494A4A14
F84991C8FC5D495B90B5FC5D5A485C7314F05A4B6F14E05A7314C0487214804B93383FFE
00F20FF84896C8FCA4485CA5B6FCB07EA281A37EA36C80A37E6F18FE6CF201FFA26C6E5F
1CFE6C801B076C6EEF0FFC6D7F70EE1FF86DF13FF06D6E167F6D6EEEFFE06D02F84B13C0
6D6E5D6D02FF030F13806D03C0023F1300023F02F0903801FFFC6E9126FF801F5B020792
B65A6E18C0020060033F4CC7FC030716F8030016C0041F4AC8FCDC007F13C0585F78DD67
>99 D<94387FFFC0040FB6FC93B712E0030716FC031F16FF037F17C04AB912F00207DAF8
0380021F912680003F13FE4A49C7000F7F4A01F802038049B5486E804902C06E6C7F494A
6F7F4991C9FC49727F4949707F4B84498490B548707F5A4B198048855D481CC086481CE0
5D5A871DF05AA25D5AA21DF887A2B6FCA392BBFCA51DF00380CDFCA77EA4817EA37EA281
7EA26CF307F06FF00FF87E816C1B1F6F19F06C1B3F6D6DF07FE06D7FF4FFC06D6E4C1380
6D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C01FFEEFFF86E02E002035B6E02FC021F
5B02079126FFC003B55A6E92B7C7FC020060033F17F8030F17E003011780DB003F03FCC8
FC040315C0DC000F01F8C9FC5D5F7ADD6A>101 D<F5FFC093260FFFFC030F13F04BB600
E0027F7F031F03FE49B512FE037F9226FF8007800203B8EAF01F020FDDFC3F15804A7148
133F027FDA003F90B500F014C091B500F80107ED807F4902E00101ECFC00010702806D6C
5B93C87E49496F7F49496F7F49496F6D6D1380491A8077130090B5486F6E6C5AF503F848
75C8FCA2484A6F80A44887AB6C63A46C6E4B5CA26C63A26D6D4B5CA26D97C9FC6D6D4B5B
6D6D4B5B6D6D4B5B705C010102E049B512E06D02F801075C4902FF013F5C4992B648CAFC
496002F317F090260FE07F1680031F4BCBFC90261FC00115E0DB000F01FCCCFC013F91CF
FCA3137FA280A380A28080806E7E15F092B812F06DF0FFE01BFEF3FFC06D1AF81CFE767E
6D1BE06D87896D1BFE6D877F6E878A0103BD7E130F013F8890BEFC4802E0C9003F814891
CBFC4801FC180F48490601804849727E484985884849737F88A2B55A88A66E616C65A26E
616C6D4F5B6C656E616C6D4F5B6C6D96B55A6C6D6C05035C6F5FC602F0051F49C7FC6D01
FC057F5B6DD9FF800303B55A010F02F8033F14E06DDAFFE0010FB65A010192B9C8FCD900
3F19F8020F19E0020196C9FCDA001F17F0030194CAFCDB000192CBFC6A887ADD74>103
D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B2963803FFFC073FEBFFE096B612F806
0715FE061F6F7E4E16E095B87E4DD9FC03804DD9C000804D48C76C7FDD0FF880DD1FE082
4D486E804D5A05FEC881DCF1FC815F04F385EEF7F04D81EEFFC0A24D84A294C9FCA25EA3
5EA45EB3B3AFB9D8E001B912C0A9>114 143 119 270 129 I[<EC3FC0ECFFF0010313FC
497F497F498049804980A290B67EA24881A86C5DA26D5CA26D5C6D5C6D91C8FC6D5B6D5B
010013F0EC3FC091CAFCB3A3ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B3B3B0B91280
A9>49 144 119 271 65 I[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B3B3B3B3B3AC
B912C0A9>50 143 119 270 65 108 D<DB3FE0912601FFFC943801FFFC017FB5031FD9
FFE0041FEBFFE0B792B600FC93B612FC060303FF030315FF060F04C0020F16C0063F04F0
023F16F095B86C91B87E4DD9FC036E49D9FC03804DD9C0006E49D9C000804D48C7003F6D
4948C7003F7FDD0FF86EDB0FF880D8003F4B48714848830107DB3FC06E9126C03FC06E80
4D484E5A6D4BC86F48C881DCE1FE6FDAE1FE814D61DCE3F8DEF3F884DCE7F0F0F7F04D6F
4B81DCEFC0F0FFC0A2DCFF804F84A294C993C9FCA24C61A34C61A44C61B3B3AFB900E090
B900E090B912E0A9B35D77DCC2>I<DB3FE0913803FFFC017FB5033FEBFFE0B792B612F8
060715FE061F6F7E4E16E095B87E4DD9FC03804DD9C000804D48C76C7FDD0FF880D8003F
DB1FE08201074B486E804D5A6D03FEC881DCE1FC815F04E385EEE7F04D81EEEFC0A2DCFF
8084A294C9FCA25EA35EA45EB3B3AFB9D8E001B912C0A9725D77DC81>I<94381FFFF004
07B612C0047F15FC0303B87E030F17E0037F17FC4ABAFC4A9126FC007F80020F02C00107
14E04A49C880027F01F8033F13FC91B5486F7F4902C003077F494A6F804991C96C804949
70804949717F49874949717FA290B548717F48884B83481D80A2481DC04B83481DE0A248
1DF0A3484A7114F8A4481DFCA5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F
6C1DC0A26C6E4D1480A26C1D006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D
6E4B5C6D02F0031F5C6D6E4B91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C
020791B812C0020196C8FC6E6C17FC031F17F003031780DB007F03FCC9FC040715C0DC00
1F01F0CAFC675F7ADD74>I<DB1FF091381FFFC0017FB50203B6FCB7021F15E095B712FC
050316FF050F17C0053F17F094B912FC04F1DAC01F8004F79026FC00018093B500E06D6C
14C0D8003F93C86C8001074B030F8005F86F806D03E06F804D6F804D8194CA6C7F4C864C
71805E7680A27680A27680A28B88A28BA288A28BA4882080B0200064A467A26467A3525C
A26764676467647062704D91C7FC7094B55AA2714B5C714B5C714B5C05F84B5C71033F5C
05FF4B91C8FC06C049B55A04FB01F001075C04F801FF017F14F07190B712C0051F94C9FC
7116FC050316F0DD007F1580060F02F8CAFC060049CBFC96CDFCB3ACB912E0A9718579DC
81>I<DB7FC049B47E90B6021F13F8B7027F13FE4DB67E4D15E04D814D814D01077F9426
3FF00F7F94387FC01F4D48487FD8003F16000107DAC1FE491480EEC3FC6D5DEEC7F05F16
CF5F16DF4D6D1400A204FFC76C5BA2735B4C6E5B735B070013C04C92C8FCA45EA65EB3B3
AAB912FCA9515D79DC5F>114 D<92261FFFF814F80203B638C001FC023FEDFC0791B812
1F010317FF130F013F9038F8001F4990C8FCD9FFF8153F4801E0150F4849150348498148
90CAFC197F4848173F191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14
FC14FF15F06CECFF8016FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C72
7E6C856D84011F846D841303010084023F83140F020183EC001FDB007F16801603DC000F
15C01700183F060F14E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F
7F1B006E5E6E5F6E163F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A
01F991B7C7FCD9F07F16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C02
0349C9FC4B5F78DD5C>I[<ED03FEA81507A5150FA4151FA3153FA2157FA215FFA25CA25C
5CA25C5C5C5C91B5FC13035B131F017F91B712F00007BAFCBBFCA7C74AC9FCB3B3AAF101
FFB1616E17FE82A219076E17FC836EEE0FF871131F6E6EEB3FF071137F6E6EEBFFE06EDA
FF0313C06E92B512806E1700033F5D6F5D03075D030015E0041F1480040001FCC7FC>72
132 124 258 90 I<DB0FF8F01FF0017FB594B6FCB74BB7FCA9D8003F94C77E0107190F
A26D85B3B3B063A463A263A27F6398B6FCA26DF001FB7015036EEF07F3E00FE3806E6D15
1FE07FC314FF6E6D6CDAFF83EDFFC06E6E010313036E02FCEB3FFE6E91B612FC020017F8
6F16E0031F16800303EDFE00DB007F14F8040102C093C8FC725E77DC81>I<B90303B7FC
A9D8000702F8CA000FEBFE006D6E050013E0666D6E6164826D5090C7FC836E4F5AA26E6E
4C5AA26E6E4C5AA26E6E5F1C3F836E4F5A836E4F5AA26E6E4B5BA26E6E4B90C8FCA26F6E
5D1B07846F4D5A846F4D5AA26F6E4A5AA26F6E4A5AA26F6E5D1BFF846F4C5B846F4C90C9
FCA2706E485AA27002C05B1A0F7002E05B1A1F19F0704B5A19F8704B5AA2706E485AA270
6E5B96B5FC7093CAFCA3715CA2715CA2715CA2715CA3715CA2715CA2715CA27191CBFCA2
725AA3725A725A725A705D7BDB7B>I E end
TeXDict begin
%%PaperSize: a4
%%BeginPaperSize: a4
a4
%%EndPaperSize

35 0 bop -116 713 a Fv(Chapter)78 b(3)-116 1158 y(T)-19
b(ransitiv)-6 b(e)75 b(closure)i(computation)h(using)-116
1434 y(strong)g(comp)6 b(onen)-6 b(ts)-116 1903 y Fu(Strong)44
b(comp)s(onen)m(ts)i(are)e(probably)h(the)g(most)f(imp)s(ortan)m(t)f
(source)j(of)e(redundan)m(t)i(computations)e(in)-116
2036 y(transitiv)m(e)31 b(closure)i(algorithms)c(that)j(do)g(not)g
(detect)h(them)f([44].)43 b(Some)32 b(transitiv)m(e)f(closure)i
(algorithms)-116 2170 y(presen)m(ted)27 b(in)c(the)i(literature)e(are)i
(based)h(on)e(detecting)h(the)g(strong)f(comp)s(onen)m(ts)h(of)g(the)f
(input)h(graph,)h(see)-116 2303 y([36)o(,)i(40,)f(62,)h(64)o(,)g(91)o
(,)g(101)o(,)g(105)o(].)42 b(Most)28 b(of)g(these)g(algorithms)d(are)j
(based)h(on)e(T)-8 b(arjan's)28 b(strong)g(comp)s(onen)m(t)-116
2437 y(algorithm)35 b([118)o(].)61 b(The)39 b(problem)e(with)h(these)i
(algorithms)35 b(is)j(that)g(they)h(either)g(generate)g(one)f(partial)
-116 2571 y(successor)33 b(set)f(for)e(eac)m(h)i(v)m(ertex)h(of)d(the)h
(comp)s(onen)m(t)g(or)g(scan)h(the)f(whole)g(input)f(graph)h(more)f
(than)h(once.)30 2707 y(In)43 b(this)f(c)m(hapter,)j(w)m(e)f(presen)m
(t)f(new)h(transitiv)m(e)d(closure)i(algorithms)c(that)j(solv)m(e)h
(these)g(problems.)-116 2841 y(First,)52 b(w)m(e)d(review)g(T)-8
b(arjan's)49 b(strong)g(comp)s(onen)m(t)g(algorithm)c(and)k(presen)m(t)
h(t)m(w)m(o)f(impro)m(v)m(ed)g(v)m(ersions)-116 2974
y(of)d(it.)83 b(Then,)51 b(starting)46 b(from)f(a)h(simple)e
(adaptation)h(of)h(T)-8 b(arjan's)47 b(algorithm)c(to)j(transitiv)m(e)g
(closure)-116 3108 y(computation,)33 b(w)m(e)i(dev)m(elop)g(t)m(w)m(o)g
(new)g(e\016cien)m(t)g(transitiv)m(e)f(closure)g(algorithms.)46
b(Finally)-8 b(,)32 b(w)m(e)j(compare)-116 3241 y(the)e(new)g
(algorithms)d(with)i(the)h(previous)g(ones)h(presen)m(ted)h(in)c(the)i
(literature.)-116 3611 y Ft(3.1)160 b(Strong)53 b(comp)t(onen)l(t)d
(detection)j({)g(T)-13 b(arjan's)54 b(algorithm)-116
3848 y Fu(T)-8 b(arjan)44 b([118)o(])h(presen)m(ted)h(an)e(elegan)m(t)g
(algorithm)e(that)i(\014nds)h(the)g(strong)f(comp)s(onen)m(ts)h(in)f
(\002\()p Fs(n)30 b Fu(+)g Fs(e)p Fu(\))-116 3982 y(time,)j(where)i
Fs(n)g Fu(is)e(the)i(n)m(um)m(b)s(er)f(of)g(v)m(ertices)i(and)e
Fs(e)g Fu(is)g(the)g(n)m(um)m(b)s(er)h(of)f(edges)h(in)e(the)i(input)e
(graph.)48 b(W)-8 b(e)-116 4115 y(review)33 b(here)g(the)g(basic)g
(ideas)f(of)g(T)-8 b(arjan's)33 b(algorithm.)41 b(Our)32
b(aim)f(is)h(not)g(simply)g(to)g(duplicate)f(existing)-116
4249 y(material,)f(but)j(to)f(giv)m(e)h(a)g(basis)f(for)h(describing)f
(and)h(analyzing)e(the)j(transitiv)m(e)e(closure)h(algorithms)d(w)m(e)
-116 4383 y(ha)m(v)m(e)44 b(designed)g(and)f(the)g(impro)m(v)m(emen)m
(ts)g(on)g(T)-8 b(arjan's)44 b(algorithm)39 b(that)k(w)m(e)h(ha)m(v)m
(e)g(made.)75 b(W)-8 b(e)43 b(use)h(a)-116 4516 y(notation)29
b(that)h(di\013ers)h(from)e(the)i(original)c(presen)m(tation)k([118)o
(],)g(but)g(that)g(simpli\014es)d(the)j(description)f(of)-116
4650 y(the)j(algorithm)c(and)k(its)f(analysis.)30 4786
y(T)-8 b(arjan's)44 b(algorithm)39 b(con)m(tains)44 b(t)m(w)m(o)f(in)m
(terlea)m(v)m(ed)h(tra)m(v)m(ersals)g(of)f(the)g(graph.)75
b(First,)45 b(a)e(depth-\014rst)-116 4920 y(searc)m(h)29
b(tra)m(v)m(erses)h(all)25 b(edges)k(and)f(constructs)h(a)f
(depth-\014rst)g(spanning)g(forest.)42 b(Second,)29 b(once)g(a)e(so)h
(called)-116 5053 y Fr(r)-5 b(o)g(ot)48 b Fu(of)38 b(a)h(strong)g(comp)
s(onen)m(t)g(is)f(found,)j(all)36 b(its)j(descendan)m(ts)i(that)e(are)g
(not)f(elemen)m(ts)h(of)g(previously)-116 5187 y(found)33
b(comp)s(onen)m(ts)i(are)e(mark)m(ed)h(as)g(elemen)m(ts)g(of)f(this)g
(comp)s(onen)m(t.)47 b(This)33 b(second)i(tra)m(v)m(ersal)f(is)f
(imple-)-116 5321 y(men)m(ted)j(b)m(y)g(using)f(a)g(stac)m(k,)i(where)f
(eac)m(h)h(v)m(ertex)g(is)d(stored)i(when)h(en)m(tered)f(b)m(y)h(the)e
(depth-\014rst)h(searc)m(h.)-116 5454 y(Before)f(the)h(ro)s(ot)e(of)h
(a)g(comp)s(onen)m(t)h(is)e(exited,)j(all)c(v)m(ertices)k(do)m(wn)f(to)
f(the)g(ro)s(ot)g(are)g(remo)m(v)m(ed)h(from)e(the)-116
5588 y(stac)m(k)g(and)e(they)i(form)d(the)i(comp)s(onen)m(t)g(in)e
(question.)30 5724 y(T)-8 b(arjan's)28 b(algorithm)c(is)j(presen)m(ted)
j(in)d(Figure)k(3.1.)42 b(It)27 b(consists)i(of)e(a)g(recursiv)m(e)i
(pro)s(cedure)f Fq(visit)g Fu(and)-116 5858 y(a)40 b(main)f(program)h
(that)g(applies)g Fq(visit)g Fu(to)h(eac)m(h)g(v)m(ertex)i(that)d(has)h
(not)g(already)f(b)s(een)i(visited.)67 b Fq(visit)p eop
36 1 bop -116 -294 a Fu(36)-116 6 y Fp(\(1\))218 b Fo(pro)s(cedure)31
b Fn(visit)p Fp(\()p Fm(v)s Fp(\);)-116 132 y(\(2\))218
b Fo(b)s(egin)-116 257 y Fp(\(3\))385 b Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b Fm(v)s Fp(;)31 b Fl(Comp)q
Fp(\()p Fm(v)s Fp(\))g(:=)61 b Fl(Nil)p Fp(;)-116 382
y(\(4\))385 b Fn(push)o Fp(\()p Fm(v)s(;)15 b Fl(stack)q
Fp(\);)-116 508 y(\(5\))385 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h
Fm(w)g Fp(suc)m(h)e(that)h(\()p Fm(v)s(;)15 b(w)r Fp(\))28
b Fk(2)c Fm(E)36 b Fo(do)31 b(b)s(egin)-116 633 y Fp(\(6\))551
b Fo(if)31 b Fm(w)i Fp(is)c(not)i(already)f(visited)e
Fo(then)i Fn(visit)q Fp(\()p Fm(w)r Fp(\);)-116 758 y(\(7\))551
b Fo(if)31 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))c(=)d Fl(Nil)30
b Fo(then)h Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))31
b(:=)61 b Fn(min)p Fp(\()p Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(v)s Fp(\))p Fm(;)15 b Fl(R)-5 b(o)g(ot)t Fp(\()p Fm(w)r
Fp(\)\))-116 884 y(\(8\))385 b Fo(end)p Fp(;)-116 1009
y(\(9\))g Fo(if)30 b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s
Fp(\))26 b(=)f Fm(v)34 b Fo(then)c(b)s(egin)-116 1134
y Fp(\(10\))506 b(create)32 b(a)f(new)f(comp)s(onen)m(t)h
Fm(C)7 b Fp(;)-116 1260 y(\(11\))506 b Fo(rep)s(eat)-116
1385 y Fp(\(12\))673 b Fm(w)33 b Fp(:=)61 b Fn(pop)o
Fp(\()p Fl(stack)q Fp(\);)-116 1510 y(\(13\))673 b Fl(Comp)q
Fp(\()p Fm(w)r Fp(\))32 b(:=)61 b Fm(C)7 b Fp(;)-116
1636 y(\(14\))673 b(insert)29 b Fm(w)k Fp(in)m(to)e(comp)s(onen)m(t)f
Fm(C)7 b Fp(;)-116 1761 y(\(15\))506 b Fo(un)m(til)31
b Fm(w)d Fp(=)c Fm(v)-116 1886 y Fp(\(16\))340 b Fo(end)-116
2012 y Fp(\(17\))173 b Fo(end)p Fp(;)-116 2137 y(\(18\))g
Fo(b)s(egin)31 b Fp(/*)g(Main)f(program)g(*/)-116 2262
y(\(19\))340 b Fl(stack)61 b Fp(:=)f Fk(;)p Fp(;)-116
2388 y(\(20\))340 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h
Fm(v)c Fk(2)d Fm(V)51 b Fo(do)-116 2513 y Fp(\(21\))506
b Fo(if)31 b Fm(v)i Fp(is)d(not)g(already)g(visited)f
Fo(then)h Fn(visit)p Fp(\()p Fm(v)s Fp(\))-116 2638 y(\(22\))173
b Fo(end)p Fp(.)-116 2820 y Fq(Figure)48 b(3.1)p Fu(:)64
b(T)-8 b(arjan's)43 b(algorithm)c(detects)44 b(the)g(strongly)e
(connected)i(comp)s(onen)m(ts)f(of)g(graph)f Fs(G)j Fu(=)-116
2928 y(\()p Fs(V)5 b(;)17 b(E)6 b Fu(\).)-116 3269 y(en)m(ters)39
b(the)e(v)m(ertices)i(of)e(the)h(graph)f(in)f(depth-\014rst)j(order.)58
b(F)-8 b(or)36 b(eac)m(h)i(strong)g(comp)s(onen)m(t)f
Fs(C)7 b Fu(,)39 b(the)e(\014rst)-116 3402 y(v)m(ertex)42
b(of)d Fs(C)47 b Fu(that)40 b Fq(visit)f Fu(en)m(ters)j(is)d(called)g
(the)h Fr(r)-5 b(o)g(ot)50 b Fu(of)39 b(comp)s(onen)m(t)h
Fs(C)7 b Fu(.)66 b(An)40 b(imp)s(ortan)m(t)e(task)j(of)e(the)-116
3536 y(algorithm)34 b(is)j(to)g(\014nd)h(the)g(comp)s(onen)m(t)f(ro)s
(ots.)58 b(F)-8 b(or)37 b(this)g(purp)s(ose,)i(w)m(e)g(de\014ne)f(a)g
(v)-5 b(ariable)35 b Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t
Fu(\))37 b(for)-116 3670 y(eac)m(h)c(v)m(ertex)i Fs(v)t
Fu(.)43 b(When)33 b Fq(visit)f Fu(is)g(pro)s(cessing)h(v)m(ertex)i
Fs(v)t Fu(,)d Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))32
b(con)m(tains)h(a)f(candidate)g(v)m(ertex)i(for)e(the)-116
3803 y(ro)s(ot)f(of)i(the)g(comp)s(onen)m(t)f(con)m(taining)f
Fs(v)t Fu(.)30 3962 y(Initially)-8 b(,)38 b(at)g(line)g(3,)j(v)m(ertex)
g Fs(v)h Fu(itself)c(is)h(the)g(ro)s(ot)f(candidate.)63
b(When)40 b Fq(visit)f Fu(pro)s(cesses)i(the)f(edges)-116
4096 y(lea)m(ving)i(v)m(ertex)i Fs(v)j Fu(at)42 b(lines)g(5{8,)j(new)f
(ro)s(ot)e(candidates)h(are)g(obtained)f(from)g(c)m(hildren)g(v)m
(ertices)i(that)-116 4229 y(b)s(elong)32 b(to)i(the)g(same)f(comp)s
(onen)m(t)g(as)h Fs(v)t Fu(.)46 b(The)35 b Fq(min)f Fu(op)s(eration)e
(at)h(line)g(7)g(compares)g(the)h(v)m(ertices)h(using)-116
4363 y(the)d(order)h(in)e(whic)m(h)i Fq(visit)e Fu(has)i(en)m(tered)h
(them,)e(i.e.,)f Fq(min)q Fu(\()p Fs(x;)17 b(y)t Fu(\))27
b(=)g Fs(x)33 b Fu(if)e Fq(visit)h Fu(en)m(tered)h(v)m(ertex)h
Fs(x)f Fu(b)s(efore)-116 4496 y(it)26 b(en)m(tered)k(v)m(ertex)f
Fs(y)t Fu(,)f(otherwise)g Fq(min)q Fu(\()p Fs(x;)17 b(y)t
Fu(\))26 b(=)i Fs(y)t Fu(.)41 b(A)28 b(simple)e(w)m(a)m(y)j(to)e
(implemen)m(t)f(this)h(is)g(to)h(use)g(an)g(arra)m(y)-116
4630 y(and)g(a)g(coun)m(ter)i(to)e(assign)g(a)g(unique)h(depth-\014rst)
g(n)m(um)m(b)s(er)g(to)f(eac)m(h)h(v)m(ertex.)44 b(When)29
b Fq(visit)f Fu(has)h(pro)s(cessed)-116 4764 y(all)j(edges)i(lea)m
(ving)f Fs(v)t Fu(,)h Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t
Fu(\))30 b(=)f Fs(v)38 b Fu(i\013)33 b Fs(v)k Fu(is)d(the)g(ro)s(ot)f
(of)g(the)h(comp)s(onen)m(t)g(con)m(taining)f Fs(v)k
Fu(\(line)c(9\).)47 b(Note)-116 4897 y(ho)m(w)m(ev)m(er,)35
b(that)e(if)f Fs(v)37 b Fu(is)32 b(not)h(a)g(comp)s(onen)m(t)g(ro)s
(ot,)f(w)m(e)i(do)f(not)g(kno)m(w)h(whether)h Fr(R)-5
b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))33 b(is)f(the)i(righ)m(t)e(ro)s(ot)-116
5031 y(of)g(the)h(comp)s(onen)m(t)f(con)m(taining)g Fs(v)t
Fu(.)30 5190 y(T)-8 b(o)33 b(distinguish)e(b)s(et)m(w)m(een)j(v)m
(ertices)g(b)s(elonging)c(to)j(the)f(same)h(comp)s(onen)m(t)f(as)h(v)m
(ertex)h Fs(v)i Fu(and)d(v)m(ertices)-116 5323 y(b)s(elonging)k(to)h
(other)h(comp)s(onen)m(ts,)i(a)e(v)-5 b(ariable)37 b
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))h(is)g(de\014ned)i(for)e(eac)m(h)i(v)m
(ertex)h Fs(w)s Fu(.)61 b(Its)40 b(initial)-116 5457
y(v)-5 b(alue)41 b(is)h Fr(Nil)p Fu(.)73 b(When)43 b(a)f(comp)s(onen)m
(t)h Fs(C)49 b Fu(is)41 b(detected,)47 b Fq(visit)42
b Fu(sets)h Fr(Comp)o Fu(\()p Fs(w)s Fu(\))32 b(:=)75
b Fs(C)49 b Fu(for)42 b(eac)m(h)h(v)m(ertex)-116 5591
y Fs(w)h Fu(that)d(b)s(elongs)g(to)g Fs(C)48 b Fu(\(line)40
b(13\).)69 b(An)42 b(auxiliary)d(stac)m(k)k(is)e(used)h(for)f(this)g
(purp)s(ose.)71 b(Eac)m(h)42 b(v)m(ertex)h(is)-116 5724
y(stored)31 b(on)m(to)f(the)h(stac)m(k)h(in)e(the)h(b)s(eginning)e(of)h
Fq(visit)o Fu(.)43 b(When)32 b(the)f(comp)s(onen)m(t)f(is)g(detected,)j
(the)e(v)m(ertices)-116 5858 y(b)s(elonging)25 b(to)j(it)e(are)i(on)f
(top)h(of)f(the)h(stac)m(k.)43 b Fq(visit)27 b Fu(remo)m(v)m(es)i(them)
e(from)g(the)h(stac)m(k,)i(sets)e(their)g Fr(Comp)o Fu(\()p
Fs(w)s Fu(\))p eop
37 2 bop 3778 -294 a Fu(37)672 -7 y Fj(\(a\))-84 2176
y @beginspecial 0 @llx 0 @lly 298 @urx 366 @ury 1984
@rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 18 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -135 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -267 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-135 -267 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(g) 300 400 null Vertex
(i) 400 400 null Vertex
(b) 200 500 null Vertex
(d) 200 300 null Vertex
(f) 300 500 null Vertex
(h) 400 500 null Vertex
(j) 400 300 null Vertex
(a) 300 600 null Vertex
(c) 200 400 null Vertex
(e) 300 300 null Vertex
(g) (f) [[/edgetype /leftedge ]] Edge
(h) (i) [[/edgetype /leftedge ]] Edge
(a) (b) [[/edgetype /leftedge ]] Edge
(i) (j) [] Edge
(b) (c) [[/edgetype /leftedge ]] Edge
(i) (e) [] Edge
(c) (d) [] Edge
(e) (d) [[/edgetype /leftedge ]] Edge
(f) (g) [[/edgetype /leftedge ]] Edge
(a) (h) [] Edge
(i) (h) [[/edgetype /leftedge ]] Edge
(b) (a) [[/edgetype /leftedge ]] Edge
(i) (c) [[/edgetype /leftedge ][/deviation 0.2 ][/startangle 30 ]] Edge
(c) (b) [[/edgetype /leftedge ]] Edge
(g) (d) [] Edge
(d) (e) [[/edgetype /leftedge ]] Edge
(a) (f) [] Edge
[[135 267 433 633 ]{gsave mark 2.0 4.0 ] 0.0 setdash mark <61><68><69><68><61><62><63><62>] ClosedPolyLine 147 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <34>show mark <66><67>] ClosedPolyLine 247 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <32>show mark <64><65>] ClosedPolyLine 147 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <31>show mark <6a>] ClosedPolyLine 347 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <33>show grestore }] Graphics
$GraphsEnd
 @endspecial 3178 -7 a(\(b\))2712 238 y Fu(V)-8 b(ertex)p
3039 278 4 134 v 101 w(Adjacency)34 b(list)p 2662 282
1084 4 v 2940 375 a Fs(a)p 3039 415 4 134 v 100 w Fu(\()p
Fs(b;)17 b(f)5 b(;)17 b(h)p Fu(\))2950 509 y Fs(b)p 3039
549 V 100 w Fu(\()p Fs(c;)g(a)p Fu(\))2949 643 y Fs(c)p
3039 683 V 100 w Fu(\()p Fs(d;)g(b)p Fu(\))2940 776 y
Fs(d)p 3039 816 V 100 w Fu(\()p Fs(e)p Fu(\))2946 910
y Fs(e)p 3039 950 V 100 w Fu(\()p Fs(d)p Fu(\))2932 1043
y Fs(f)p 3039 1083 V 111 w Fu(\()p Fs(g)t Fu(\))2941
1177 y Fs(g)p 3039 1217 V 103 w Fu(\()p Fs(f)5 b(;)17
b(d)o Fu(\))2935 1311 y Fs(h)p 3039 1351 V 100 w Fu(\()p
Fs(i)p Fu(\))2958 1444 y Fs(i)p 3039 1484 V 100 w Fu(\()p
Fs(h;)g(j;)g(e;)g(c)p Fu(\))2945 1578 y Fs(j)p 3039 1618
V 106 w Fu(\(\))16 2342 y Fq(Figure)37 b(3.2)p Fu(:)44
b Fj(\(a\))32 b Fu(Graph)g Fs(G)h Fu(with)f(four)g(strong)h(comp)s
(onen)m(ts.)44 b Fj(\(b\))32 b Fu(The)h(adjacency)h(lists)d(of)i
Fs(G)p Fu(.)-116 2647 y(v)-5 b(ariables,)31 b(and)i(inserts)g(them)f
(in)m(to)g(comp)s(onen)m(t)h Fs(C)7 b Fu(.)-116 2901
y Fj(Example)43 b(3.1.)101 b Fu(Consider)39 b(the)g(graph)g(in)e
(Figure)32 b(3.2\(a\))o(.)62 b(It)39 b(consists)g(of)f(four)h(strong)f
(comp)s(onen)m(ts)-116 3035 y Fs(C)-46 3050 y Fi(1)40
3035 y Fu(=)47 b Fh(f)p Fs(d;)17 b(e)p Fh(g)p Fu(,)46
b Fs(C)546 3050 y Fi(2)632 3035 y Fu(=)h Fh(f)p Fs(f)5
b(;)17 b(g)t Fh(g)p Fu(,)46 b Fs(C)1146 3050 y Fi(3)1232
3035 y Fu(=)h Fh(f)p Fs(j)6 b Fh(g)p Fu(,)46 b(and)e
Fs(C)1845 3050 y Fi(4)1931 3035 y Fu(=)j Fh(f)p Fs(a;)17
b(b;)g(c;)g(h;)g(i)p Fh(g)p Fu(,)46 b(whic)m(h)f(w)m(e)g(ha)m(v)m(e)g
(encircled.)78 b(In)-116 3168 y(Figure)31 b(3.3,)f(w)m(e)g(presen)m(t)h
(the)e(trace)g(of)g(one)g(p)s(ossible)g(application)d(of)j(T)-8
b(arjan's)29 b(algorithm)d(to)i(the)i(graph.)-116 3302
y(W)-8 b(e)41 b(assume)h(that)f(the)h(execution)f(starts)h(at)f(v)m
(ertex)i Fs(a)p Fu(.)69 b(T)-8 b(arjan's)42 b(algorithm)c(pro)s(cesses)
43 b(the)f(v)m(ertices)-116 3436 y(adjacen)m(t)e(from)f(a)g(v)m(ertex)j
Fs(v)i Fu(in)39 b(the)h(order)g(in)f(whic)m(h)h(they)h(app)s(ear)f(in)f
(the)h(adjacency)h(list)e(of)g Fs(v)t Fu(.)65 b(The)-116
3569 y(adjacency)26 b(lists)e(are)i(presen)m(ted)h(in)d(Figure)32
b(3.2\(b\).)41 b(The)26 b(trace)f(lists)g(the)g(op)s(erations)f(that)h
(T)-8 b(arjan's)26 b(algo-)-116 3703 y(rithm)i(do)s(es,)j(i.e.,)e(en)m
(tering)h(and)g(exiting)e(v)m(ertices)j(\(lines)e(2)g(and)h(17)f(of)g
(T)-8 b(arjan's)30 b(algorithm\),)d(mo)s(difying)-116
3837 y(the)34 b(v)-5 b(alues)33 b(of)g(the)h Fr(R)-5
b(o)g(ot)33 b Fu(and)h Fr(Comp)e Fu(v)-5 b(ariables)32
b(\(lines)h(3,)g(7,)h(and)f(13)g(of)g(T)-8 b(arjan's)34
b(algorithm\),)c(creating)-116 3970 y(new)i(comp)s(onen)m(ts)g(\(line)e
(10)h(of)g(T)-8 b(arjan's)32 b(algorithm\),)c(and)k(storing)e(v)m
(ertices)j(on)m(to)e(and)h(remo)m(ving)e(them)-116 4104
y(from)e Fr(stack)i Fu(\(lines)f(4)g(and)h(12)f(of)g(T)-8
b(arjan's)30 b(algorithm\).)40 b(W)-8 b(e)30 b(also)f(presen)m(t)i(the)
f(curren)m(t)h(state)f(of)g Fr(stack)f Fu(at)-116 4237
y(an)m(y)k(giv)m(en)g(momen)m(t.)p 737 4237 4 67 v 741
4174 59 4 v 741 4237 V 799 4237 4 67 v 30 4491 a(Besides)39
b(T)-8 b(arjan's)38 b(algorithm,)e(another)i(linear)e(time)g(strong)i
(comp)s(onen)m(t)g(algorithm)c(is)k(presen)m(ted)-116
4625 y(in)32 b(man)m(y)h(textb)s(o)s(oks.)46 b(The)34
b(algorithm)c(is)i(attributed)h(in)f([11])h(to)g(R.Kosara)5
b(ju)33 b(and)g(published)g(in)f([108].)-116 4759 y(This)26
b(algorithm)d(is)j(inferior)e(to)i(T)-8 b(arjan's)27
b(algorithm,)d(since)j(it)e(requires)i(one)g(depth-\014rst)g(tra)m(v)m
(ersal)g(of)e(the)-116 4892 y(input)37 b(graph)g(and)g(another)g(tra)m
(v)m(ersal)h(of)e(the)i(graph)f(obtained)g(b)m(y)h(rev)m(ersing)g(the)g
(edges)g(of)f(the)g(input)-116 5026 y(graph.)-116 5377
y Fg(3.1.1)136 b(Analysis)-116 5591 y Fu(W)-8 b(e)36
b(pro)m(v)m(e)h(no)m(w)g(the)g(correctness)h(of)d(T)-8
b(arjan's)37 b(algorithm.)50 b(The)37 b(pro)s(of)e(is)h(rather)g
(detailed)f(and)h(di\013ers)-116 5724 y(from)h(the)j(original)c(presen)
m(tation)j(in)f([118].)62 b(It)39 b(serv)m(es)j(as)d(a)g(basis)f(for)h
(the)g(correctness)i(pro)s(ofs)e(of)f(the)-116 5858 y(new)45
b(algorithms)d(that)i(w)m(e)h(presen)m(t)h(later)e(in)f(this)h(c)m
(hapter.)80 b(First,)46 b(w)m(e)g(giv)m(e)e(some)g(de\014nitions)g
(that)p eop
38 3 bop -116 -294 a Fu(38)374 6 y(Op)s(eration)p 1280
44 4 126 v 526 w(Stac)m(k)p 1834 44 V 322 w(Op)s(eration)p
2783 44 V 517 w(Stac)m(k)p 324 47 3081 4 v 374 135 a
Fl(enter)q Fp(\()p Fm(a)p Fp(\))p 1280 173 4 126 v 1834
173 V 1311 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p 2783
173 V 401 w(\()p Fm(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))435
260 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(a)p Fp(\))31 b(:=)f
Fm(a)p 1280 298 V 1834 298 V 1069 w Fl(Comp)q Fp(\()p
Fm(g)s Fp(\))i(:=)e Fm(C)2578 274 y Fi(2)p 2783 298 V
2835 260 a Fp(\()p Fm(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))435
386 y Fn(push)o Fp(\()p Fm(a;)g Fl(stack)q Fp(\))p 1280
423 V 337 w(\()p Fm(a)p Fp(\))p 1834 423 V 557 w Fn(pop)o
Fp(\()p Fl(stack)q Fp(\))p 2783 423 V 401 w(\()p Fm(c;)g(b;)g(a)p
Fp(\))435 511 y Fl(enter)p Fp(\()p Fm(b)p Fp(\))p 1280
549 V 585 w(\()p Fm(a)p Fp(\))p 1834 549 V 557 w Fl(Comp)q
Fp(\()p Fm(f)10 b Fp(\))31 b(:=)f Fm(C)2586 525 y Fi(2)p
2783 549 V 2835 511 a Fp(\()p Fm(c;)15 b(b;)g(a)p Fp(\))496
636 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(b)p Fp(\))31 b(:=)f
Fm(b)p 1280 674 V 351 w Fp(\()p Fm(a)p Fp(\))p 1834 674
V 497 w Fl(exit)p Fp(\()p Fm(f)10 b Fp(\))p 2783 674
V 621 w(\()p Fm(c;)15 b(b;)g(a)p Fp(\))496 762 y Fn(push)n
Fp(\()p Fm(b;)g Fl(stack)r Fp(\))p 1280 799 V 285 w(\()p
Fm(b;)g(a)p Fp(\))p 1834 799 V 418 w Fl(enter)p Fp(\()p
Fm(h)p Fp(\))p 2783 799 V 563 w(\()p Fm(c;)g(b;)g(a)p
Fp(\))496 887 y Fl(enter)p Fp(\()p Fm(c)p Fp(\))p 1280
925 V 524 w(\()p Fm(b;)g(a)p Fp(\))p 1834 925 V 478 w
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(h)p Fp(\))32 b(:=)e Fm(h)p
2783 925 V 316 w Fp(\()p Fm(c;)15 b(b;)g(a)p Fp(\))556
1012 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(c)p Fp(\))32 b(:=)e
Fm(c)p 1280 1050 V 290 w Fp(\()p Fm(b;)15 b(a)p Fp(\))p
1834 1050 V 478 w Fn(push)o Fp(\()p Fm(h;)g Fl(stack)r
Fp(\))p 2783 1050 V 263 w(\()p Fm(h;)g(c;)g(b;)g(a)p
Fp(\))556 1138 y Fn(push)o Fp(\()p Fm(c;)g Fl(stack)r
Fp(\))p 1280 1175 V 224 w(\()p Fm(c;)g(b;)g(a)p Fp(\))p
1834 1175 V 399 w Fl(enter)p Fp(\()p Fm(i)p Fp(\))p 2783
1175 V 524 w(\()p Fm(h;)g(c;)g(b;)g(a)p Fp(\))556 1263
y Fl(enter)p Fp(\()p Fm(d)p Fp(\))p 1280 1301 V 456 w(\()p
Fm(c;)g(b;)g(a)p Fp(\))p 1834 1301 V 460 w Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(i)p Fp(\))31 b(:=)f Fm(i)p 2783 1301 V 298
w Fp(\()p Fm(h;)15 b(c;)g(b;)g(a)p Fp(\))617 1388 y Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(d)p Fp(\))31 b(:=)f Fm(d)p 1280
1426 V 214 w Fp(\()p Fm(c;)15 b(b;)g(a)p Fp(\))p 1834
1426 V 460 w Fn(push)o Fp(\()p Fm(i;)g Fl(stack)q Fp(\))p
2783 1426 V 224 w(\()p Fm(i;)g(h;)g(c;)g(b;)g(a)p Fp(\))617
1514 y Fn(push)o Fp(\()p Fm(d;)g Fl(stack)q Fp(\))p 1280
1551 V 156 w(\()p Fm(d;)g(c;)g(b;)g(a)p Fp(\))p 1834
1551 V 373 w Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(i)p Fp(\))31
b(:=)f Fm(h)p 2783 1551 V 277 w Fp(\()p Fm(i;)15 b(h;)g(c;)g(b;)g(a)p
Fp(\))617 1639 y Fl(enter)p Fp(\()p Fm(e)p Fp(\))p 1280
1677 V 400 w(\()p Fm(d;)g(c;)g(b;)g(a)p Fp(\))p 1834
1677 V 373 w Fl(enter)p Fp(\()p Fm(j)5 b Fp(\))p 2783
1677 V 452 w(\()p Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))677
1764 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(e)p Fp(\))32 b(:=)e
Fm(e)p 1280 1802 V 163 w Fp(\()p Fm(d;)15 b(c;)g(b;)g(a)p
Fp(\))p 1834 1802 V 433 w Fl(R)-5 b(o)g(ot)s Fp(\()p
Fm(j)5 b Fp(\))31 b(:=)f Fm(j)p 2783 1802 V 220 w Fp(\()p
Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))677 1890 y Fn(push)o
Fp(\()p Fm(e;)g Fl(stack)r Fp(\))p 1280 1927 V 100 w(\()p
Fm(e;)g(d;)g(c;)g(b;)g(a)p Fp(\))p 1834 1927 V 351 w
Fn(push)o Fp(\()p Fm(j;)g Fl(stack)r Fp(\))p 2783 1927
V 157 w(\()p Fm(j;)g(i;)g(h;)g(c;)g(b;)g(a)p Fp(\))677
2015 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(e)p Fp(\))32 b(:=)e
Fm(d)p 1280 2053 V 158 w Fp(\()p Fm(e;)15 b(d;)g(c;)g(b;)g(a)p
Fp(\))p 1834 2053 V 351 w(create)32 b Fm(C)2461 2029
y Fi(3)p 2783 2053 V 2835 2015 a Fp(\()p Fm(j;)15 b(i;)g(h;)g(c;)g(b;)g
(a)p Fp(\))617 2140 y Fl(exit)p Fp(\()p Fm(e)p Fp(\))p
1280 2178 V 461 w(\()p Fm(e;)g(d;)g(c;)g(b;)g(a)p Fp(\))p
1834 2178 V 351 w Fn(pop)p Fp(\()p Fl(stack)p Fp(\))p
2783 2178 V 280 w(\()p Fm(i;)g(h;)g(c;)g(b;)g(a)p Fp(\))617
2266 y(create)32 b Fm(C)950 2280 y Fi(1)p 1280 2303 V
1332 2266 a Fp(\()p Fm(e;)15 b(d;)g(c;)g(b;)g(a)p Fp(\))p
1834 2303 V 351 w Fl(Comp)r Fp(\()p Fm(j)5 b Fp(\))31
b(:=)g Fm(C)2696 2280 y Fi(3)p 2783 2303 V 2835 2266
a Fp(\()p Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))617 2391
y Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p 1280 2429 V 288
w(\()p Fm(d;)g(c;)g(b;)g(a)p Fp(\))p 1834 2429 V 373
w Fl(exit)p Fp(\()p Fm(j)5 b Fp(\))p 2783 2429 V 513
w(\()p Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))617 2516 y
Fl(Comp)q Fp(\()p Fm(e)p Fp(\))31 b(:=)g Fm(C)1184 2530
y Fi(1)p 1280 2554 V 1332 2516 a Fp(\()p Fm(d;)15 b(c;)g(b;)g(a)p
Fp(\))p 1834 2554 V 373 w Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(i)p Fp(\))31 b(:=)f Fm(b)p 2783 2554 V 290 w Fp(\()p
Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))617 2642 y Fn(pop)o
Fp(\()p Fl(stack)q Fp(\))p 1280 2679 V 288 w(\()p Fm(c;)g(b;)g(a)p
Fp(\))p 1834 2679 V 399 w Fl(exit)p Fp(\()p Fm(i)p Fp(\))p
2783 2679 V 585 w(\()p Fm(i;)g(h;)g(c;)g(b;)g(a)p Fp(\))617
2767 y Fl(Comp)q Fp(\()p Fm(d)p Fp(\))31 b(:=)g Fm(C)1189
2781 y Fi(1)p 1280 2805 V 1332 2767 a Fp(\()p Fm(c;)15
b(b;)g(a)p Fp(\))p 1834 2805 V 399 w Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(h)p Fp(\))32 b(:=)e Fm(b)p 2783 2805 V 329
w Fp(\()p Fm(i;)15 b(h;)g(c;)g(b;)g(a)p Fp(\))556 2892
y Fl(exit)p Fp(\()p Fm(d)p Fp(\))p 1280 2930 V 517 w(\()p
Fm(c;)g(b;)g(a)p Fp(\))p 1834 2930 V 339 w Fl(exit)p
Fp(\()p Fm(h)p Fp(\))p 2783 2930 V 624 w(\()p Fm(i;)g(h;)g(c;)g(b;)g(a)
p Fp(\))556 3018 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(c)p
Fp(\))32 b(:=)e Fm(b)p 1280 3055 V 290 w Fp(\()p Fm(c;)15
b(b;)g(a)p Fp(\))p 1834 3055 V 339 w(create)31 b Fm(C)2279
3032 y Fi(4)p 2783 3055 V 2835 3018 a Fp(\()p Fm(i;)15
b(h;)g(c;)g(b;)g(a)p Fp(\))496 3143 y Fl(exit)p Fp(\()p
Fm(c)p Fp(\))p 1280 3181 V 585 w(\()p Fm(c;)g(b;)g(a)p
Fp(\))p 1834 3181 V 339 w Fn(pop)o Fp(\()p Fl(stack)q
Fp(\))p 2783 3181 V 461 w(\()p Fm(h;)g(c;)g(b;)g(a)p
Fp(\))496 3268 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(b)p Fp(\))31
b(:=)f Fm(a)p 1280 3306 V 342 w Fp(\()p Fm(c;)15 b(b;)g(a)p
Fp(\))p 1834 3306 V 339 w Fl(Comp)q Fp(\()p Fm(i)p Fp(\))31
b(:=)f Fm(C)2502 3282 y Fi(4)p 2783 3306 V 2835 3268
a Fp(\()p Fm(h;)15 b(c;)g(b;)g(a)p Fp(\))435 3394 y Fl(exit)p
Fp(\()p Fm(b)p Fp(\))p 1280 3431 V 646 w(\()p Fm(c;)g(b;)g(a)p
Fp(\))p 1834 3431 V 339 w Fn(pop)o Fp(\()p Fl(stack)q
Fp(\))p 2783 3431 V 461 w(\()p Fm(c;)g(b;)g(a)p Fp(\))435
3519 y Fl(enter)p Fp(\()p Fm(f)10 b Fp(\))p 1280 3557
V 569 w(\()p Fm(c;)15 b(b;)g(a)p Fp(\))p 1834 3557 V
339 w Fl(Comp)q Fp(\()p Fm(h)p Fp(\))31 b(:=)g Fm(C)2524
3533 y Fi(4)p 2783 3557 V 2835 3519 a Fp(\()p Fm(c;)15
b(b;)g(a)p Fp(\))496 3644 y Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(f)10 b Fp(\))30 b(:=)g Fm(f)p 1280 3682 V 330 w Fp(\()p
Fm(c;)15 b(b;)g(a)p Fp(\))p 1834 3682 V 339 w Fn(pop)o
Fp(\()p Fl(stack)q Fp(\))p 2783 3682 V 461 w(\()p Fm(b;)g(a)p
Fp(\))496 3770 y Fn(push)n Fp(\()p Fm(f)5 b(;)15 b Fl(stack)q
Fp(\))p 1280 3807 V 275 w(\()p Fm(f)5 b(;)15 b(c;)g(b;)g(a)p
Fp(\))p 1834 3807 V 249 w Fl(Comp)q Fp(\()p Fm(c)p Fp(\))31
b(:=)f Fm(C)2510 3784 y Fi(4)p 2783 3807 V 2835 3770
a Fp(\()p Fm(b;)15 b(a)p Fp(\))496 3895 y Fl(enter)p
Fp(\()p Fm(g)s Fp(\))p 1280 3933 V 517 w(\()p Fm(f)5
b(;)15 b(c;)g(b;)g(a)p Fp(\))p 1834 3933 V 249 w Fn(pop)o
Fp(\()p Fl(stack)q Fp(\))p 2783 3933 V 461 w(\()p Fm(a)p
Fp(\))556 4020 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(g)s Fp(\))32
b(:=)e Fm(g)p 1280 4058 V 279 w Fp(\()p Fm(f)5 b(;)15
b(c;)g(b;)g(a)p Fp(\))p 1834 4058 V 249 w Fl(Comp)q Fp(\()p
Fm(b)p Fp(\))31 b(:=)f Fm(C)2510 4034 y Fi(4)p 2783 4058
V 2835 4020 a Fp(\()p Fm(a)p Fp(\))556 4146 y Fn(push)o
Fp(\()p Fm(g)s(;)15 b Fl(stack)r Fp(\))p 1280 4183 V
217 w(\()p Fm(g)s(;)g(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))p
1834 4183 V 163 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p
2783 4183 V 461 w(\(\))556 4271 y Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(g)s Fp(\))32 b(:=)e Fm(f)p 1280 4309 V 277
w Fp(\()p Fm(g)s(;)15 b(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))p
1834 4309 V 163 w Fl(Comp)q Fp(\()p Fm(a)p Fp(\))31 b(:=)f
Fm(C)2519 4285 y Fi(4)p 2783 4309 V 2835 4271 a Fp(\(\))496
4396 y Fl(exit)p Fp(\()p Fm(g)s Fp(\))p 1280 4434 V 578
w(\()p Fm(g)s(;)15 b(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))p
1834 4434 V 102 w Fl(exit)p Fp(\()p Fm(a)p Fp(\))p 2783
4434 V 689 w(\(\))496 4522 y(create)31 b Fm(C)828 4536
y Fi(2)p 1280 4559 V 1332 4522 a Fp(\()p Fm(g)s(;)15
b(f)5 b(;)15 b(c;)g(b;)g(a)p Fp(\))p 1834 4559 V 2783
4559 V 156 4720 a Fq(Figure)38 b(3.3)p Fu(:)43 b(The)34
b(trace)e(of)h(T)-8 b(arjan's)32 b(algorithm)e(applied)h(to)i(the)g
(graph)f(of)g(Figure)g(3.2)o(.)-116 5072 y(are)i(related)f(to)g(the)h
(depth-\014rst)h(searc)m(h)g(that)f(T)-8 b(arjan's)34
b(algorithm)c(uses)36 b(to)d(tra)m(v)m(erse)i(the)g(input)e(graph.)-116
5206 y(Similar)c(de\014nitions)j(can)h(b)s(e)f(giv)m(en)h(for)f(an)m(y)
h(algorithm)d(that)i(is)g(based)i(on)e(a)h(depth-\014rst)g(searc)m(h.)
-116 5591 y Fj(De\014nition)p Fu(.)79 b(Let)41 b Fs(G)g
Fu(=)g(\()p Fs(V)5 b(;)17 b(E)6 b Fu(\))40 b(b)s(e)g(a)h(graph.)66
b(A)41 b Fr(depth-\014rst)g(sp)-5 b(anning)41 b(for)-5
b(est)42 b(of)g Fs(G)g Fr(induc)-5 b(e)g(d)41 b(by)h(an)-116
5724 y(exe)-5 b(cution)32 b(of)h(T)-7 b(arjan)d('s)31
b(algorithm)37 b Fu(is)30 b(a)h(spanning)f(forest)h Fs(F)41
b Fu(=)27 b(\()p Fs(V)5 b(;)17 b(E)2525 5688 y Ff(0)2549
5724 y Fu(\))30 b(of)g Fs(G)g Fu(suc)m(h)i(that)f Fs(E)3339
5688 y Ff(0)3392 5724 y Fu(con)m(tains)g(an)-116 5858
y(edge)i(\()p Fs(v)t(;)17 b(w)s Fu(\))31 b(of)h Fs(E)39
b Fu(i\013)31 b(pro)s(cedure)j Fq(visit)e Fu(en)m(tered)i
Fs(w)h Fu(via)d(edge)h(\()p Fs(v)t(;)17 b(w)s Fu(\))32
b(at)g(line)f(6)h(of)g(T)-8 b(arjan's)33 b(algorithm.)p
eop
39 4 bop 3778 -294 a Fu(39)30 18 y(By)36 b(this)g(de\014nition,)f(the)h
(execution)h(of)e Fq(visit)p Fu(\()p Fs(v)t Fu(\))g(con)m(tains)g(the)i
(execution)f(of)f Fq(visit)p Fu(\()p Fs(w)s Fu(\))g(i\013)f(a)i(path)
-116 152 y Fs(v)-33 99 y Ff(\003)-65 152 y Fh(!)o Fs(w)h
Fu(exists)d(in)g(the)g(depth-\014rst)h(spanning)f(forest.)48
b(A)34 b(graph)g(usually)f(has)i(man)m(y)f(p)s(ossible)f(depth-\014rst)
-116 286 y(spanning)h(forests,)h(since)f(the)h(order)f(of)g(scanning)g
(the)g(v)m(ertices)h(at)f(line)f(20)g(and)i(the)f(order)g(of)g
(scanning)-116 419 y(the)f(edges)g(at)g(line)e(5)h(of)g(T)-8
b(arjan's)33 b(algorithm)d(is)i(not)g(\014xed.)-116 641
y Fj(De\014nition)p Fu(.)89 b(A)45 b Fr(depth-\014rst)h(or)-5
b(der)46 b(of)h(gr)-5 b(aph)45 b Fs(G)k Fu(=)g(\()p Fs(V)5
b(;)17 b(E)6 b Fu(\))47 b Fr(induc)-5 b(e)g(d)46 b(by)g(an)g(exe)-5
b(cution)46 b(of)g(T)-7 b(arjan)d('s)-116 774 y(algorithm)p
Fu(,)41 b(denoted)h Fh(\024)809 789 y Fe(\034)852 774
y Fu(,)h(is)c(a)h(total)f(order)i(on)f(the)h(v)m(ertex)h(set)f
Fs(V)62 b Fu(suc)m(h)41 b(that)f Fs(v)45 b(<)3135 789
y Fe(\034)3219 774 y Fs(w)e Fu(i\013)c(pro)s(cedure)-116
908 y Fq(visit)32 b Fu(en)m(tered)i Fs(v)i Fu(b)s(efore)d
Fs(w)i Fu(in)d(the)h(execution)g(of)f(T)-8 b(arjan's)33
b(algorithm.)30 1130 y(Similarly)27 b(to)j(the)h(depth-\014rst)h
(spanning)e(forests,)i(a)e(graph)h(usually)e(has)i(man)m(y)g(p)s
(ossible)f(depth-\014rst)-116 1263 y(orders.)49 b(Note)35
b(that)f(if)f(a)i(depth-\014rst)g(spanning)f(forest)h
Fs(F)48 b Fu(con)m(tains)34 b(a)g(path)h Fs(v)2901 1210
y Ff(\003)2869 1263 y Fh(!)o Fs(w)s Fu(,)g(then)g Fs(v)f
Fh(\024)3485 1278 y Fe(\034)3560 1263 y Fs(w)s Fu(.)48
b(The)-116 1397 y(con)m(v)m(erse)43 b(is)d(not)h(necessarily)h(true,)h
(since)e(v)m(ertex)i Fs(v)h Fu(ma)m(y)d(b)s(e)g(b)s(oth)g(en)m(tered)h
(and)f(exited)g(b)s(efore)g Fs(w)i Fu(is)-116 1530 y(en)m(tered.)-116
1752 y Fj(De\014nition)p Fu(.)53 b(Giv)m(en)27 b(a)g(graph)g
Fs(G)h Fu(=)f(\()p Fs(V)5 b(;)17 b(E)6 b Fu(\))27 b(together)h(with)e
(a)h(depth-\014rst)h(spanning)f(forest)h Fs(F)41 b Fu(=)28
b(\()p Fs(V)5 b(;)17 b(E)3815 1716 y Ff(0)3838 1752 y
Fu(\))-116 1886 y(and)30 b(a)g(depth-\014rst)h(order)g
Fh(\024)955 1901 y Fe(\034)1029 1886 y Fu(of)f Fs(G)g
Fu(induced)h(b)m(y)g(an)f(execution)h(of)f(T)-8 b(arjan's)30
b(algorithm,)e(the)j(edge)g(set)g Fs(E)-116 2019 y Fu(is)36
b(partitioned)f(in)m(to)g(four)h(groups)h(as)g(follo)m(ws.)54
b(Let)36 b(\()p Fs(v)t(;)17 b(w)s Fu(\))35 b(b)s(e)i(in)f
Fs(E)42 b Fu(and)37 b(let)f Fs(T)2937 2034 y Fe(w)3030
2019 y Fu(b)s(e)g(the)h(subtree)h(of)e Fs(F)-116 2153
y Fu(ro)s(oted)c(at)g Fs(w)s Fu(.)-26 2374 y(1.)48 b(If)33
b(\()p Fs(v)t(;)17 b(w)s Fu(\))31 b(is)h(in)g Fs(E)761
2338 y Ff(0)784 2374 y Fu(,)h(then)g(\()p Fs(v)t(;)17
b(w)s Fu(\))31 b(is)i(a)f Fr(tr)-5 b(e)g(e)35 b(e)-5
b(dge)p Fu(.)-26 2551 y(2.)48 b(If)33 b Fs(v)e(<)350
2566 y Fe(\034)421 2551 y Fs(w)k Fu(and)e(\()p Fs(v)t(;)17
b(w)s Fu(\))31 b(is)h(not)g(in)g Fs(E)1454 2515 y Ff(0)1477
2551 y Fu(,)h(then)g(\()p Fs(v)t(;)17 b(w)s Fu(\))32
b(is)g(a)g Fr(forwar)-5 b(d)34 b(e)-5 b(dge)p Fu(.)-26
2729 y(3.)48 b(If)33 b Fs(w)d Fh(\024)373 2744 y Fe(\034)444
2729 y Fs(v)37 b Fu(and)32 b Fs(v)k Fu(is)d(in)e Fs(T)1069
2744 y Fe(w)1126 2729 y Fu(,)i(then)g(\()p Fs(v)t(;)17
b(w)s Fu(\))31 b(is)h(a)h Fr(b)-5 b(ack)34 b(e)-5 b(dge)p
Fu(.)-26 2906 y(4.)48 b(If)33 b Fs(w)d(<)372 2921 y Fe(\034)443
2906 y Fs(v)36 b Fu(and)d Fs(v)j Fu(is)c(not)g(in)g Fs(T)1241
2921 y Fe(w)1298 2906 y Fu(,)h(then)g(\()p Fs(v)t(;)17
b(w)s Fu(\))31 b(is)h(a)g Fr(cr)-5 b(oss)35 b(e)-5 b(dge)p
Fu(.)30 3127 y(Note)36 b(that)g(for)g(eac)m(h)g(forw)m(ard)h(edge)f(\()
p Fs(v)t(;)17 b(w)s Fu(\),)36 b(the)g(graph)g(con)m(tains)g(a)g(path)g
(from)f Fs(v)k Fu(to)d Fs(w)j Fu(consisting)-116 3261
y(solely)33 b(of)g(tree)h(edges)h(and)f(v)m(ertex)i Fs(w)g
Fu(is)d(in)g(the)h(subtree)i Fs(T)2102 3276 y Fe(v)2176
3261 y Fu(of)e Fs(F)47 b Fu(ro)s(oted)34 b(at)f Fs(v)t
Fu(.)47 b(Note)34 b(also)f(that)g(a)h(bac)m(k)-116 3394
y(edge)f(indicates)f(a)g(cycle)h(in)f(the)h(graph.)-116
3616 y Fj(De\014nition)p Fu(.)138 b(An)39 b(edge)g(\()p
Fs(v)t(;)17 b(w)s Fu(\))38 b(suc)m(h)i(that)f Fs(v)j
Fu(and)d Fs(w)i Fu(are)e(in)f(the)h(same)g(comp)s(onen)m(t)f
Fs(C)46 b Fu(is)38 b(called)g(an)-116 3750 y Fr(intr)-5
b(ac)g(omp)g(onent)39 b(e)-5 b(dge)p Fu(.)59 b(An)39
b(edge)g(\()p Fs(v)t(;)17 b(w)s Fu(\))37 b(suc)m(h)i(that)f
Fs(v)k Fu(and)c Fs(w)j Fu(are)d(in)g(t)m(w)m(o)h(di\013eren)m(t)f(comp)
s(onen)m(ts)h Fs(C)3837 3765 y Fi(1)-116 3883 y Fu(and)32
b Fs(C)143 3898 y Fi(2)215 3883 y Fu(is)g(called)g(an)g
Fr(inter)-5 b(c)g(omp)g(onent)34 b(e)-5 b(dge)p Fu(.)30
4105 y(W)d(e)38 b(divide)f(in)m(tracomp)s(onen)m(t)g(edges)h(further)g
(in)m(to)f(in)m(tracomp)s(onen)m(t)g(tree)h(edges,)i(in)m(tracomp)s
(onen)m(t)-116 4238 y(forw)m(ard)45 b(edges,)k(in)m(tracomp)s(onen)m(t)
44 b(bac)m(k)h(edges,)k(and)c(in)m(tracomp)s(onen)m(t)f(cross)i(edges.)
81 b(Similarly)-8 b(,)44 b(w)m(e)-116 4372 y(divide)38
b(in)m(tercomp)s(onen)m(t)h(edges)h(in)m(to)e(in)m(tercomp)s(onen)m(t)h
(tree)g(edges,)j(in)m(tercomp)s(onen)m(t)d(forw)m(ard)g(edges,)-116
4506 y(and)34 b(in)m(tercomp)s(onen)m(t)g(cross)i(edges.)50
b(Note)34 b(that)g(no)h(in)m(tercomp)s(onen)m(t)f(bac)m(k)h(edges)h
(exist,)f(since)g(a)f(bac)m(k)-116 4639 y(edge)f(is)f(alw)m(a)m(ys)h
(inside)f(a)g(comp)s(onen)m(t.)-116 4861 y Fj(De\014nition)p
Fu(.)76 b(Giv)m(en)39 b(a)f(depth-\014rst)i(order)f Fh(\024)1672
4876 y Fe(\034)1754 4861 y Fu(of)g(graph)f Fs(G)h Fu(and)g(a)f(strong)h
(comp)s(onen)m(t)g Fs(C)46 b Fu(of)38 b Fs(G)p Fu(,)i(the)-116
4994 y Fr(r)-5 b(o)g(ot)42 b Fu(of)32 b Fs(C)39 b Fu(is)33
b(the)g(smallest)e(v)m(ertex)j(of)e Fs(C)40 b Fu(in)31
b Fh(\024)1657 5009 y Fe(\034)1701 4994 y Fu(.)30 5216
y(The)37 b(ro)s(ot)e(of)h(a)f(strong)h(comp)s(onen)m(t)g(ma)m(y)g(b)s
(e)g(di\013eren)m(t)h(in)e(di\013eren)m(t)h(executions)h(of)f(T)-8
b(arjan's)36 b(algo-)-116 5350 y(rithm.)42 b(The)33 b(follo)m(wing)d
(lemma)g(explains)j(the)g(name)f(\\ro)s(ot.")-116 5571
y Fj(Lemma)e(3.1.)d Fu(Let)g Fs(C)34 b Fu(b)s(e)27 b(a)g(strong)g(comp)
s(onen)m(t)f(of)h(a)f(graph)h Fs(G)p Fu(,)h(let)e Fs(F)41
b Fu(b)s(e)27 b(a)f(depth-\014rst)i(spanning)f(forest)-116
5705 y(of)37 b Fs(G)h Fu(induced)h(b)m(y)g(an)f(execution)g(of)g(T)-8
b(arjan's)38 b(algorithm,)f(and)h(let)f Fs(r)k Fu(b)s(e)d(the)h(ro)s
(ot)e(of)g Fs(C)45 b Fu(in)38 b(the)g(same)-116 5838
y(execution.)44 b(Then)34 b(eac)m(h)f(v)m(ertex)i Fs(v)h
Fu(of)c(comp)s(onen)m(t)g Fs(C)40 b Fu(is)32 b(in)g(the)h(subtree)h
Fs(T)2709 5853 y Fe(r)2779 5838 y Fu(of)f Fs(F)46 b Fu(ro)s(oted)32
b(at)g Fs(r)s Fu(.)p eop
40 5 bop -116 -294 a Fu(40)-116 18 y Fj(Pro)s(of.)102
b Fu(Supp)s(ose)39 b(that)e Fs(C)45 b Fu(con)m(tains)38
b(a)f(v)m(ertex)j Fs(v)h Fu(that)d(is)f(not)h(in)f Fs(T)2546
33 y Fe(r)2584 18 y Fu(.)59 b(Ob)m(viously)38 b Fs(v)i
Fh(6)p Fu(=)c Fs(r)s Fu(.)59 b(Since)38 b Fs(r)i Fu(is)-116
152 y(the)d(ro)s(ot,)g Fq(visit)g Fu(has)g(not)g(en)m(tered)h
Fs(v)j Fu(when)d(it)e(en)m(ters)i Fs(r)s Fu(,)g(and)f(since)g
Fs(v)j Fu(is)d(not)f(in)h Fs(T)3094 167 y Fe(r)3132 152
y Fu(,)h Fs(v)i Fu(is)d(not)f(en)m(tered)-116 286 y(during)28
b(the)i(execution)f(of)g Fq(visit)p Fu(\()p Fs(r)s Fu(\).)42
b(But)29 b(neither)g(can)g(an)m(y)h(v)m(ertex)h(adjacen)m(t)f(to)e
Fs(v)33 b Fu(b)s(e)c(in)g Fs(T)3356 301 y Fe(r)3394 286
y Fu(,)h(since)f(then)-116 419 y Fs(v)37 b Fu(w)m(ould)d(b)s(e)g(en)m
(tered)i(during)d(the)i(execution)f Fq(visit)p Fu(\()p
Fs(u)p Fu(\))f(for)h(some)g(v)m(ertex)h Fs(u)f Fu(adjacen)m(t)g(to)g
Fs(v)t Fu(.)47 b(The)35 b(same)-116 553 y(argumen)m(t)h(can)h(rep)s
(eatedly)f(b)s(e)h(applied)e(to)h(all)f(predecessors)k(of)d
Fs(v)t Fu(.)55 b(Hence)37 b(no)g(predecessor)i(of)d Fs(v)k
Fu(is)c(in)-116 686 y Fs(T)-59 701 y Fe(r)-21 686 y Fu(.)43
b(But)33 b(this)f(is)g(a)h(con)m(tradiction,)e(since)i
Fs(r)i Fu(is)d(in)g Fs(T)1820 701 y Fe(r)1891 686 y Fu(and)h
Fs(r)i Fu(is)d(a)g(predecessor)j(of)d Fs(v)t Fu(.)p 3087
686 4 67 v 3091 623 59 4 v 3091 686 V 3149 686 4 67 v
-116 905 a Fj(De\014nition)p Fu(.)58 b(Let)p 628 827
77 4 v 30 w Fs(G)29 b Fu(b)s(e)h(the)g(condensation)g(graph)g(induced)g
(b)m(y)h(the)f(strong)g(comp)s(onen)m(ts)g(of)f Fs(G)p
Fu(.)43 b(A)29 b Fr(le)-5 b(af)-116 1038 y(of)p -2 960
V 34 w Fs(G)32 b Fu(is)g(a)g(strong)g(comp)s(onen)m(t)g(with)g(no)g
(outgoing)f(edges.)44 b(The)33 b Fr(level)h(of)h(a)f(str)-5
b(ong)34 b(c)-5 b(omp)g(onent)34 b Fs(C)39 b Fu(is)31
b(the)-116 1172 y(length)h(of)g(the)h(longest)f(path)h(from)e
Fs(C)39 b Fu(to)33 b(a)f(leaf)g(in)p 1855 1094 V 31 w
Fs(G)p Fu(.)30 1390 y(W)-8 b(e)42 b(pro)m(v)m(e)h(the)f(correctness)i
(of)d(T)-8 b(arjan's)42 b(algorithm)c(\(and)k(later)e(the)i
(correctness)i(of)d(other)h(algo-)-116 1524 y(rithms\))31
b(b)m(y)j(induction)d(on)i(the)g(lev)m(el)f(of)g(the)h(strong)g(comp)s
(onen)m(t.)-116 1743 y Fj(Lemma)k(3.2.)c Fu(F)-8 b(or)32
b(ev)m(ery)i(v)m(ertex)g Fs(v)t Fu(,)f Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(v)t Fu(\))27 b Fh(\024)1750 1758 y Fe(\034)1821
1743 y Fs(v)t Fu(.)-116 1961 y Fj(Pro)s(of.)93 b Fu(A)m(t)36
b(line)e(3)h(of)g Fq(visit)p Fu(,)h Fs(v)k Fu(is)35 b(assigned)h(to)f
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\).)52 b(A)m(t)36
b(line)e(7,)i(the)g(minim)m(um)c(of)k Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(v)t Fu(\))35 b(and)-116 2094 y Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(w)s Fu(\))32 b(is)g(assigned)h(to)f Fr(R)-5
b(o)g(ot)p Fu(\()p Fs(v)t Fu(\).)43 b(Since)33 b Fr(R)-5
b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))32 b(is)g(not)h(mo)s(di\014ed)e
(elsewhere,)j Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))27
b Fh(\024)3413 2109 y Fe(\034)3485 2094 y Fs(v)t Fu(.)p
3606 2094 4 67 v 3610 2031 59 4 v 3610 2094 V 3667 2094
4 67 v -116 2312 a Fj(De\014nition)p Fu(.)75 b(The)39
b Fr(\014nal)g(c)-5 b(andidate)39 b(r)-5 b(o)g(ot)41
b(of)e(vertex)h Fs(x)p Fu(,)g(denoted)f Fr(Fcr)p Fu(\()p
Fs(x)p Fu(\),)h(is)e(the)g(v)m(ertex)i Fs(y)h Fu(suc)m(h)f(that)-116
2446 y Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(x)p Fu(\))48 b(=)f
Fs(y)h Fu(at)c(line)f(9)h(of)f(T)-8 b(arjan's)45 b(algorithm)c(when)46
b(pro)s(cedure)f Fq(visit)f Fu(has)g(pro)s(cessed)j(all)42
b(edges)-116 2580 y(lea)m(ving)31 b(v)m(ertex)k Fs(x)p
Fu(.)-116 2798 y Fj(Theorem)j(3.3.)33 b Fu(T)-8 b(arjan's)34
b(algorithm,)c(presen)m(ted)36 b(in)d(Figure)e(3.1,)i(correctly)h
(detects)h(the)f(strong)f(com-)-116 2931 y(p)s(onen)m(ts)g(of)g(the)g
(input)f(graph.)-116 3150 y Fj(Pro)s(of.)87 b Fu(A)35
b(comp)s(onen)m(t)f Fs(C)41 b Fu(with)34 b(ro)s(ot)f
Fs(r)k Fu(is)d(correctly)g(detected)i(i\013)d Fr(Comp)o
Fu(\()p Fs(x)p Fu(\))e(=)f Fs(C)42 b Fu(for)33 b(eac)m(h)i(v)m(ertex)h
Fs(x)-116 3283 y Fu(of)31 b Fs(C)39 b Fu(when)33 b Fq(visit)e
Fu(exits)h(the)g(ro)s(ot)f Fs(r)s Fu(,)h(and)g(the)g(con)m(ten)m(ts)h
(of)e(the)i(auxiliary)c(stac)m(k)k(is)e(the)i(same)e(as)h(it)f(w)m(as)
-116 3417 y(b)s(efore)g Fq(visit)g Fu(en)m(tered)i(the)f(ro)s(ot)f
Fs(r)s Fu(.)43 b(The)32 b(pro)s(of)f(consists)h(of)f(four)g(parts)g
Fj(\(a\))p Fu({)p Fj(\(d\))p Fu(.)42 b(Giv)m(en)32 b(a)f(comp)s(onen)m
(t)-116 3550 y Fs(C)36 b Fu(with)29 b(ro)s(ot)f Fs(r)s
Fu(,)h(part)g Fj(\(a\))g Fu(sho)m(ws)i(that)e(for)f(eac)m(h)i(v)m
(ertex)h Fs(x)f Fu(in)e Fs(C)7 b Fu(,)30 b Fr(Fcr)p Fu(\()p
Fs(x)p Fu(\))f(is)g(in)f Fs(C)7 b Fu(.)42 b(P)m(art)30
b Fj(\(b\))e Fu(sho)m(ws)j(that)-116 3684 y Fr(Fcr)o
Fu(\()p Fs(r)s Fu(\))k(=)g Fs(r)s Fu(.)57 b(P)m(art)37
b Fj(\(c\))f Fu(sho)m(ws)j(that)e(for)f(eac)m(h)i(nonro)s(ot)f(v)m
(ertex)h Fs(x)g Fu(of)f Fs(C)7 b Fu(,)38 b Fr(Fcr)o Fu(\()p
Fs(x)p Fu(\))e Fs(<)3123 3699 y Fe(\034)3201 3684 y Fs(x)p
Fu(.)58 b(Finally)-8 b(,)35 b(part)-116 3818 y Fj(\(d\))g
Fu(sho)m(ws)j(that)d(parts)i Fj(\(b\))e Fu(and)h Fj(\(c\))f
Fu(imply)f(the)i(correct)h(detection)f(of)f(comp)s(onen)m(t)h
Fs(C)7 b Fu(.)54 b(In)36 b(eac)m(h)h(part)-116 3951 y(of)32
b(the)h(pro)s(of,)f(w)m(e)h(use)h(induction)d(on)i(the)g(lev)m(el)f(of)
g(the)h(comp)s(onen)m(t)g Fs(C)7 b Fu(.)-129 4170 y Fj(\(a\))85
b Fu(F)-8 b(or)39 b(eac)m(h)i(v)m(ertex)g Fs(v)j Fu(of)39
b(a)g(comp)s(onen)m(t)h Fs(C)47 b Fu(at)39 b(lev)m(el)g(zero,)j
Fr(Fcr)p Fu(\()p Fs(v)t Fu(\))d(m)m(ust)h(b)s(e)g(in)f
Fs(C)7 b Fu(,)41 b(since)g(no)e(edge)98 4303 y(lea)m(v)m(es)34
b Fs(C)7 b Fu(.)45 b(Let)33 b(the)g(lev)m(el)g(of)f Fs(C)40
b Fu(b)s(e)33 b Fs(l)e(>)d Fu(0.)44 b(Let)33 b Fs(v)k
Fu(b)s(e)c(an)m(y)h(v)m(ertex)h(in)d(comp)s(onen)m(t)h
Fs(C)7 b Fu(.)44 b(When)34 b Fq(visit)98 4437 y Fu(pro)s(cesses)h(an)e
(edge)h(\()p Fs(v)t(;)17 b(w)s Fu(\))32 b(and)h(v)m(ertex)i
Fs(w)g Fu(is)d(in)h(another)g(comp)s(onen)m(t)g Fs(C)2893
4401 y Ff(0)2916 4437 y Fu(,)g Fs(C)3053 4401 y Ff(0)3109
4437 y Fu(m)m(ust)h(b)s(e)f(at)f(a)h(lev)m(el)98 4571
y(b)s(elo)m(w)c Fs(l)r Fu(.)42 b(If)28 b Fq(visit)g Fu(has)h(not)g
(already)f(en)m(tered)i Fs(w)s Fu(,)e(it)g(en)m(ters)i
Fs(w)h Fu(and)d(\(b)m(y)h(the)g(induction)f(h)m(yp)s(othesis\))98
4704 y(correctly)42 b(detects)i Fs(C)929 4668 y Ff(0)952
4704 y Fu(.)72 b(If)42 b Fs(w)j Fu(is)c(already)h(visited,)i(then)f
(\(again)d(b)m(y)j(the)g(induction)e(h)m(yp)s(othesis\))98
4838 y Fq(visit)33 b Fu(has)g(correctly)f(detected)j
Fs(C)1402 4802 y Ff(0)1425 4838 y Fu(.)43 b(In)33 b(b)s(oth)g(cases,)h
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))27 b Fh(6)p Fu(=)g Fr(Nil)33
b Fu(at)f(line)g(7)g(in)g Fq(visit)o Fu(\()p Fs(v)t Fu(\),)h(and)98
4972 y Fs(w)i Fu(is)d(not)h(used)g(to)g(up)s(date)g Fr(R)-5
b(o)g(ot)p Fu(\()p Fs(v)t Fu(\).)43 b(Hence)34 b Fr(Fcr)o
Fu(\()p Fs(v)t Fu(\))e(is)g(in)g Fs(C)7 b Fu(.)-137 5147
y Fj(\(b\))85 b Fu(Supp)s(ose,)30 b(on)e(the)g(con)m(trary)-8
b(,)29 b(that)e Fr(Fcr)p Fu(\()p Fs(r)s Fu(\))g Fs(<)1785
5162 y Fe(\034)1856 5147 y Fs(r)s Fu(;)i(b)m(y)f(Lemma)f(3.2,)h
Fr(Fcr)o Fu(\()p Fs(r)s Fu(\))f(cannot)h(b)s(e)g(greater)g(than)98
5281 y Fs(r)s Fu(.)55 b(By)39 b Fj(\(a\))p Fu(,)e(this)f(implies)f
(that)h Fs(C)43 b Fu(con)m(tains)37 b(a)f(v)m(ertex)j
Fs(x)c(<)2388 5296 y Fe(\034)2465 5281 y Fs(r)s Fu(.)56
b(Th)m(us,)39 b Fs(x)e Fu(w)m(as)g(en)m(tered)h(b)s(efore)f
Fs(r)s Fu(,)98 5415 y(and)c Fs(r)i Fu(cannot)e(b)s(e)g(the)g(ro)s(ot)e
(of)h Fs(C)7 b Fu(,)33 b(a)f(con)m(tradiction.)-125 5591
y Fj(\(c\))85 b Fu(Supp)s(ose,)44 b(on)d(the)g(con)m(trary)-8
b(,)43 b(that)e Fr(Fcr)o Fu(\()p Fs(x)p Fu(\))h(=)f Fs(x)g
Fu(for)f(some)h(v)m(ertex)h Fs(x)g Fh(6)p Fu(=)g Fs(r)h
Fu(in)d Fs(C)7 b Fu(.)68 b(Let)40 b Fs(x)i Fu(b)s(e)e(the)98
5724 y(\014rst)e(v)m(ertex)h(of)e Fs(C)45 b Fu(satisfying)36
b(the)i(test)g Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(x)p Fu(\))36
b(=)g Fs(x)i Fu(at)f(line)f(9)h(of)g Fq(visit)h Fu(during)e(the)i
(execution)98 5858 y(of)32 b(T)-8 b(arjan's)33 b(algorithm.)40
b(Since)32 b(b)s(oth)g Fs(x)h Fu(and)f Fs(r)j Fu(are)d(in)g
Fs(C)7 b Fu(,)32 b(one)h(or)f(more)f(non-n)m(ull)g(paths)i
Fs(x)3590 5805 y Fi(+)3567 5858 y Fh(!)p Fs(r)i Fu(are)p
eop
41 6 bop 3778 -294 a Fu(41)98 18 y(inside)35 b(comp)s(onen)m(t)g
Fs(C)7 b Fu(.)50 b(Let)35 b Fs(T)1267 33 y Fe(x)1346
18 y Fu(b)s(e)g(the)h(depth-\014rst)g(spanning)e(tree)i(ro)s(oted)e(at)
h Fs(x)p Fu(.)51 b(Since)35 b Fs(r)g(<)3719 33 y Fe(\034)3793
18 y Fs(x)p Fu(,)98 152 y(no)e(path)g Fs(x)540 99 y Fi(+)517
152 y Fh(!)p Fs(r)i Fu(completely)d(lies)f(in)h Fs(T)1526
167 y Fe(x)1571 152 y Fu(.)43 b(Let)33 b(\()p Fs(v)t(;)17
b(w)s Fu(\))32 b(b)s(e)h(the)g(\014rst)g(edge)h(considered)f(b)m(y)h
Fq(visit)e Fu(suc)m(h)98 286 y(that)39 b(\()p Fs(v)t(;)17
b(w)s Fu(\))37 b(is)h(on)h(a)f(path)h Fs(x)1242 232 y
Fi(+)1219 286 y Fh(!)p Fs(r)j Fu(and)c Fs(v)43 b Fu(is)38
b(in)g Fs(T)1971 301 y Fe(x)2015 286 y Fu(,)i(but)f Fs(w)i
Fu(is)e(not)f(in)g Fs(T)2839 301 y Fe(x)2883 286 y Fu(.)62
b(Since)39 b Fs(w)i Fu(is)d(not)h(in)f Fs(T)3805 301
y Fe(x)3849 286 y Fu(,)98 419 y Fq(visit)h Fu(has)g(en)m(tered)h(it)e
(b)s(efore)h Fs(x)g Fu(and)g(inserted)h(it)d(on)m(to)i(the)g(stac)m(k.)
64 b(Since)39 b Fs(x)g Fu(is)f(the)i(\014rst)f(v)m(ertex)98
553 y(of)c Fs(C)42 b Fu(satisfying)34 b(the)i(test)g
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(x)p Fu(\))33 b(=)f Fs(x)p
Fu(,)k Fs(w)i Fu(is)d(still)d(on)k(the)f(stac)m(k,)i(and)f
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))31 b(=)i Fr(Nil)p Fu(.)51
b(Th)m(us,)98 686 y Fq(visit)38 b Fu(uses)h Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(w)s Fu(\))37 b(in)g(up)s(dating)f Fr(R)-5
b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))37 b(and)h(\(b)m(y)h(Lemma)d(3.2\))h
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))36 b Fh(\024)3208
701 y Fe(\034)3288 686 y Fs(w)k Fu(after)d(\()p Fs(v)t(;)17
b(w)s Fu(\))98 820 y(is)43 b(pro)s(cessed.)79 b(Similarly)-8
b(,)42 b(in)h(eac)m(h)h(v)m(ertex)i Fs(u)d Fu(on)g(the)h(path)g
Fs(x)2576 767 y Ff(\003)2543 820 y Fh(!)p Fs(v)t Fu(,)i
Fq(visit)e Fu(sets)g Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(u)p
Fu(\))46 b Fh(\024)3686 835 y Fe(\034)3776 820 y Fs(w)s
Fu(.)98 954 y(In)41 b(particular,)f Fq(visit)g Fu(sets)h
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(x)p Fu(\))40 b Fh(\024)1619
969 y Fe(\034)1703 954 y Fs(w)s Fu(.)66 b(Since)40 b
Fs(w)i Fu(w)m(as)f(en)m(tered)h(b)s(efore)e Fs(x)p Fu(,)i
Fs(w)h(<)3403 969 y Fe(\034)3486 954 y Fs(x)p Fu(.)66
b(Th)m(us,)98 1087 y Fr(Fcr)p Fu(\()p Fs(x)p Fu(\))28
b Fh(\024)484 1102 y Fe(\034)555 1087 y Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(x)p Fu(\))28 b Fh(\024)984 1102 y Fe(\034)1055
1087 y Fs(w)j(<)1232 1102 y Fe(\034)1302 1087 y Fs(x)p
Fu(,)i(a)g(con)m(tradiction.)-137 1266 y Fj(\(d\))85
b Fu(Let)28 b Fs(C)35 b Fu(b)s(e)28 b(a)g(comp)s(onen)m(t)g(with)f(ro)s
(ot)g Fs(r)s Fu(.)42 b(By)28 b(Lemma)e(3.1,)j(all)d(v)m(ertices)j(of)e
Fs(C)35 b Fu(are)28 b(visited)f(during)g(the)98 1399
y(execution)h(of)g Fq(visit)o Fu(\()p Fs(r)s Fu(\))f(and)h(are)g
(inserted)g(on)m(to)f(the)h(stac)m(k)h(in)d(the)i(order)g(they)h(are)e
(en)m(tered.)43 b(If)28 b Fs(C)34 b Fu(is)98 1533 y(at)29
b(lev)m(el)g Fs(l)h(>)e Fu(0,)i(eac)m(h)g(comp)s(onen)m(t)f(other)h
(than)g Fs(C)36 b Fu(visited)29 b(during)g(the)g(execution)i(of)e
Fq(visit)o Fu(\()p Fs(r)s Fu(\))g(is)g(at)98 1667 y(a)i(lev)m(el)h(b)s
(elo)m(w)f Fs(l)r Fu(.)43 b(By)32 b(the)g(induction)e(h)m(yp)s
(othesis,)j(these)g(comp)s(onen)m(ts)f(are)f(correctly)h(detected.)45
b(If)98 1800 y Fs(C)40 b Fu(is)33 b(at)g(lev)m(el)g(zero,)h(no)f(other)
g(comp)s(onen)m(t)h(is)e(visited)h(during)g(the)h(execution)g(of)e
Fq(visit)p Fu(\()p Fs(r)s Fu(\).)45 b(Th)m(us,)98 1934
y(the)36 b(pro)s(cessing)f(of)g(other)g(comp)s(onen)m(ts)h(do)s(es)f
(not)g(remo)m(v)m(e)h(v)m(ertices)g(of)f Fs(C)42 b Fu(from)34
b(the)i(stac)m(k.)52 b(Eac)m(h)98 2067 y(v)m(ertex)43
b(of)e Fs(C)48 b Fu(remains)40 b(on)h(the)h(stac)m(k)g(un)m(til)e(the)i
(condition)e Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))42
b(=)g Fs(v)j Fu(is)c(satis\014ed)g(for)g(some)98 2201
y(v)m(ertex)g Fs(v)i Fu(of)c Fs(C)47 b Fu(at)39 b(line)f(9)h(of)g
Fq(visit)o Fu(\()p Fs(v)t Fu(\).)64 b(By)41 b Fj(\(b\))e
Fu(and)g Fj(\(c\))p Fu(,)h(the)g(condition)e(is)h(satis\014ed)h(only)e
(for)98 2335 y(the)d(ro)s(ot)e Fs(r)s Fu(.)48 b(Since)35
b(all)d(other)i(comp)s(onen)m(ts)h(pro)s(cessed)h(during)e
Fq(visit)p Fu(\()p Fs(r)s Fu(\))f(are)i(correctly)f(detected,)98
2468 y(the)k(v)m(ertices)g(of)f Fs(C)44 b Fu(are)37 b(on)g(top)g(of)f
(the)i(stac)m(k.)58 b(Since)37 b(the)h(v)m(ertices)g(are)f(inserted)h
(on)m(to)f(the)h(stac)m(k)98 2602 y(in)32 b(the)h(order)g(they)h(are)e
(en)m(tered,)j(ro)s(ot)c Fs(r)36 b Fu(is)c(the)h(b)s(ottom-most)d(v)m
(ertex)35 b(of)d Fs(C)39 b Fu(on)33 b(the)g(stac)m(k.)45
b(Th)m(us,)98 2736 y(at)31 b(lines)g(11{15)f(in)g Fq(visit)p
Fu(\()p Fs(r)s Fu(\),)h(eac)m(h)h(v)m(ertex)h Fs(w)h
Fu(of)d Fs(C)38 b Fu(is)31 b(remo)m(v)m(ed)h(from)e(the)i(stac)m(k)g
(and)g Fr(Comp)o Fu(\()p Fs(w)s Fu(\))e(is)98 2869 y(set)j(to)f
Fs(C)7 b Fu(.)43 b(When)33 b Fq(visit)f Fu(exits)h Fs(r)s
Fu(,)f(the)g(con)m(ten)m(ts)i(of)e(the)g(stac)m(k)i(is)e(the)g(same)g
(as)h(it)e(w)m(as)i(when)g Fs(r)i Fu(w)m(as)98 3003 y(en)m(tered.)45
b(Th)m(us,)35 b Fs(C)k Fu(is)32 b(correctly)h(detected.)p
1794 3003 4 67 v 1798 2940 59 4 v 1798 3003 V 1855 3003
4 67 v -116 3226 a Fj(Theorem)42 b(3.4.)c Fu(T)-8 b(arjan's)37
b(algorithm)d(runs)k(in)e(\002\()p Fs(n)26 b Fu(+)f Fs(e)p
Fu(\))37 b(time,)g(where)i Fs(n)e Fu(is)g(the)g(n)m(um)m(b)s(er)h(of)f
(v)m(ertices)-116 3359 y(and)32 b Fs(e)h Fu(the)g(n)m(um)m(b)s(er)g(of)
f(edges)i(in)e(the)h(input)f(graph.)-116 3582 y Fj(Pro)s(of.)112
b Fu(The)41 b(tests)g(at)f(lines)f(6)h(and)g(21)g(guaran)m(tee)g(that)g
Fq(visit)g Fu(en)m(ters)i(eac)m(h)f(v)m(ertex)h(at)e(most)f(once.)-116
3716 y(The)g(for-lo)s(op)d(at)i(line)f(20)h(in)g(the)h(main)d(program)h
(considers)j(eac)m(h)f(v)m(ertex)h(once.)62 b(Th)m(us,)41
b Fq(visit)d Fu(en)m(ters)-116 3850 y(eac)m(h)c(v)m(ertex)g(exactly)f
(once.)46 b(The)33 b(for-lo)s(op)e(at)h(lines)g(5{8)g(scans)i(eac)m(h)g
(edge)g(lea)m(ving)e(the)h(v)m(ertex)i Fs(v)h Fu(once.)-116
3983 y(Since)j Fq(visit)g Fu(is)g(applied)f(once)i(for)f(eac)m(h)h(v)m
(ertex)h Fs(v)t Fu(,)g(all)c Fs(e)j Fu(edges)g(are)g(considered)g
(exactly)g(once.)64 b(Eac)m(h)-116 4117 y(v)m(ertex)31
b(is)e(stored)h(on)m(to)f(the)h(stac)m(k)g(at)f(line)f(4.)42
b(The)30 b(rep)s(eat-lo)s(op)e(at)h(lines)f(11{15)h(remo)m(v)m(es)h
(eac)m(h)g(v)m(ertex)h(of)-116 4250 y(a)e(comp)s(onen)m(t)g(from)f(the)
i(stac)m(k.)44 b(Since)30 b(eac)m(h)g(v)m(ertex)h(b)s(elongs)e(to)g(a)g
(single)g(comp)s(onen)m(t,)h(the)g(rep)s(eat-lo)s(op)-116
4384 y(runs)35 b(altogether)e Fs(n)h Fu(times.)48 b(These)36
b(are)e(the)h(ma)5 b(jor)33 b(costs)i(of)f(the)g(algorithm;)e(other)j
(op)s(erations)e(can)i(b)s(e)-116 4518 y(done)e(in)f(constan)m(t)h
(time.)42 b(Adding)32 b(these)i(costs)g(together)e(yields)h(the)g
(\002\()p Fs(n)22 b Fu(+)g Fs(e)p Fu(\))33 b(b)s(ound.)p
3291 4518 V 3295 4455 59 4 v 3295 4518 V 3353 4518 4
67 v 30 4742 a(Finally)-8 b(,)39 b(w)m(e)h(presen)m(t)h(a)e(theorem)g
(that)h(forms)e(a)i(basis)f(for)g(man)m(y)g(algorithms)e(that)i(are)h
(based)g(on)-116 4876 y(T)-8 b(arjan's)40 b(algorithm.)63
b(F)-8 b(or)39 b(instance,)k(the)d(transitiv)m(e)g(closure)g
(algorithms)e(that)h(w)m(e)j(study)f(b)s(elo)m(w)f(are)-116
5009 y(based)33 b(on)g(this)f(theorem.)-116 5234 y Fj(Theorem)42
b(3.5.)37 b Fu(The)h(order)f(in)f(whic)m(h)h(T)-8 b(arjan's)37
b(algorithm)d(detects)k(the)g(strong)f(comp)s(onen)m(ts)g(of)f(the)-116
5368 y(input)26 b(graph)h Fs(G)f Fu(is)h(a)f(rev)m(erse)j(top)s
(ological)23 b(order)k(of)f(the)h(condensation)g(graph)p
2857 5290 77 4 v 27 w Fs(G)g Fu(induced)g(b)m(y)h(the)f(strong)-116
5501 y(comp)s(onen)m(ts)33 b(of)f Fs(G)p Fu(.)-116 5724
y Fj(Pro)s(of.)66 b Fu(Supp)s(ose,)25 b(on)e(the)g(con)m(trary)-8
b(,)25 b(that)d(the)h(comp)s(onen)m(ts)g(are)g(not)f(detected)j(in)d(a)
g(rev)m(erse)j(top)s(ological)-116 5858 y(order,)j(i.e.,)f(the)g(graph)
f(con)m(tains)g(t)m(w)m(o)h(distinct)e(comp)s(onen)m(ts)i
Fs(X)34 b Fu(and)27 b Fs(Y)47 b Fu(suc)m(h)28 b(that)e
Fs(X)34 b Fu(is)26 b(detected)i(b)s(efore)p eop
42 7 bop -116 -294 a Fu(42)-116 18 y Fs(Y)21 b Fu(,)33
b(and)g(at)g(least)f(one)h(path)g Fs(p)g Fu(go)s(es)g(from)e
Fs(X)41 b Fu(to)33 b Fs(Y)54 b Fu(in)32 b(the)h(condensation)g(graph)p
2992 -60 77 4 v 33 w Fs(G)p Fu(.)44 b(Let)33 b Fs(Z)40
b Fu(b)s(e)33 b(the)h(last)-116 152 y(comp)s(onen)m(t)h(in)f(path)g
Fs(p)h Fu(b)s(efore)g Fs(Y)21 b Fu(.)50 b(If)35 b Fs(Y)56
b Fu(is)34 b(not)h(en)m(tered)h(b)s(efore)f(or)g(during)f(the)h
(detection)g(of)f Fs(X)8 b Fu(,)35 b(then)-116 286 y
Fs(Z)i Fu(cannot)30 b(b)s(e)g(en)m(tered)h(either;)g(otherwise)f
Fs(Y)51 b Fu(w)m(ould)30 b(b)s(e)g(en)m(tered)i(via)d(some)h(edge)g
(leading)f(from)f Fs(Z)37 b Fu(to)30 b Fs(Y)21 b Fu(.)-116
419 y(By)31 b(a)f(similar)e(argumen)m(t,)j(w)m(e)g(can)g(sho)m(w)h
(that)f(no)f(comp)s(onen)m(t)h(preceding)g Fs(Y)52 b
Fu(in)30 b(path)h Fs(p)f Fu(can)h(b)s(e)g(en)m(tered)-116
553 y(b)s(efore)37 b(or)g(during)f(the)i(detection)f(of)f
Fs(X)8 b Fu(.)57 b(But)37 b(at)g(least)g Fs(X)45 b Fu(itself)35
b(is)i(en)m(tered)i(b)s(efore)e Fs(X)45 b Fu(is)36 b(detected,)k(a)-116
686 y(con)m(tradiction.)53 b(Th)m(us)38 b Fs(Y)58 b Fu(is)36
b(en)m(tered)i(either)e(b)s(efore)g(or)g(during)g(the)h(detection)f(of)
g Fs(X)8 b Fu(.)55 b(But)36 b(if)g(T)-8 b(arjan's)-116
820 y(algorithm)27 b(en)m(tered)33 b Fs(Y)52 b Fu(b)s(efore)31
b Fs(X)38 b Fu(is)31 b(detected,)i Fs(Y)52 b Fu(w)m(ould)30
b(b)s(e)h(detected)i(\014rst,)f(since)f(no)g(path)f(leads)h(from)-116
954 y Fs(Y)54 b Fu(bac)m(k)33 b(to)f(comp)s(onen)m(t)h
Fs(X)8 b Fu(,)32 b(a)h(con)m(tradiction.)p 1701 954 4
67 v 1705 891 59 4 v 1705 954 V 1762 954 4 67 v -116
1315 a Fg(3.1.2)136 b(Impro)l(v)l(emen)l(ts)-116 1531
y Fu(Although)43 b(T)-8 b(arjan's)45 b(algorithm)c(is)j(asymptotically)
d(optimal,)k(it)e(do)s(es)i(some)f(unnecessary)j(w)m(ork.)79
b(If)-116 1664 y(the)49 b(input)f(graph)g(is)g(acyclic,)k(eac)m(h)d
(strong)g(comp)s(onen)m(t)f(consists)i(of)e(a)g(single)f(v)m(ertex.)93
b(Th)m(us,)54 b(the)-116 1798 y(second)35 b(tra)m(v)m(ersal)g(that)f
(marks)g(the)h(elemen)m(ts)f(of)g(a)g(comp)s(onen)m(t)g(is)g(useless)i
(and)e(the)h(auxiliary)d(stac)m(k)j(is)-116 1932 y(unnecessary)-8
b(.)45 b(Also)31 b(cyclic)g(graphs)g(ma)m(y)g(con)m(tain)g(suc)m(h)i
(trivial)28 b(comp)s(onen)m(ts.)44 b(W)-8 b(e)31 b(study)i(next)f(ho)m
(w)f(the)-116 2065 y(second)j(tra)m(v)m(ersal)f(can)f(b)s(e)h
(eliminated)d(when)k(it)d(is)h(not)h(needed.)30 2208
y(T)-8 b(arjan's)36 b(algorithm)d(has)j(the)g(follo)m(wing)d(prop)s
(ert)m(y:)51 b(a)36 b(new)g(strong)g(comp)s(onen)m(t)g(is)f(detected)j
(when)-116 2342 y(pro)s(cessing)c(its)f(ro)s(ot)g(v)m(ertex.)49
b(During)33 b(the)h(second)h(tra)m(v)m(ersal)f(that)g(marks)f(the)i(v)m
(ertices)g(of)e(the)h(comp)s(o-)-116 2475 y(nen)m(t,)k(w)m(e)f(w)m
(ould)f(ha)m(v)m(e)h(access)h(to)d(the)i(ro)s(ot)e(v)m(ertex)i(ev)m(en)
h(if)d(it)g(w)m(ere)i(not)f(stored)h(on)m(to)e(the)i(stac)m(k.)55
b(Our)-116 2609 y(\014rst)39 b(impro)m(v)m(ed)g(v)m(ersion)h(of)e(T)-8
b(arjan's)40 b(algorithm,)d(called)h Fq(newscc)p Fn(1)h
Fu(and)g(presen)m(ted)i(in)d(Figure)32 b(3.4)38 b(is)-116
2900 y Fp(\(1\))218 b Fo(pro)s(cedure)31 b Fn(visit1)q
Fp(\()p Fm(v)s Fp(\);)-116 3025 y(\(2\))218 b Fo(b)s(egin)-116
3151 y Fp(\(3\))385 b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s
Fp(\))31 b(:=)61 b Fm(v)s Fp(;)31 b Fl(Comp)q Fp(\()p
Fm(v)s Fp(\))g(:=)61 b Fl(Nil)p Fp(;)-116 3276 y(\(4\))385
b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h Fm(w)g Fp(suc)m(h)e(that)h(\()p
Fm(v)s(;)15 b(w)r Fp(\))28 b Fk(2)c Fm(E)36 b Fo(do)31
b(b)s(egin)-116 3401 y Fp(\(5\))551 b Fo(if)31 b Fm(w)i
Fp(is)c(not)i(already)f(visited)e Fo(then)i Fn(visit1)q
Fp(\()p Fm(w)r Fp(\);)-116 3527 y(\(6\))551 b Fo(if)31
b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))c(=)d Fl(Nil)30 b Fo(then)h
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b
Fn(min)p Fp(\()p Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))p
Fm(;)15 b Fl(R)-5 b(o)g(ot)t Fp(\()p Fm(w)r Fp(\)\))-116
3652 y(\(7\))385 b Fo(end)p Fp(;)-116 3777 y(\(8\))g
Fo(if)30 b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))26
b(=)f Fm(v)34 b Fo(then)c(b)s(egin)-116 3903 y Fp(\(9\))551
b(create)32 b(a)f(new)f(comp)s(onen)m(t)h Fm(C)7 b Fp(;)-116
4028 y(\(10\))506 b Fl(Comp)r Fp(\()p Fm(v)s Fp(\))31
b(:=)61 b Fm(C)7 b Fp(;)-116 4153 y(\(11\))506 b(insert)30
b Fm(v)j Fp(in)m(to)e(comp)s(onen)m(t)f Fm(C)7 b Fp(;)-116
4279 y(\(12\))506 b Fo(while)30 b Fn(top)p Fp(\()p Fl(stack)p
Fp(\))c Fm(>)f(v)34 b Fo(do)c(b)s(egin)-116 4404 y Fp(\(13\))673
b Fm(w)33 b Fp(:=)61 b Fn(pop)o Fp(\()p Fl(stack)q Fp(\);)-116
4529 y(\(14\))673 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))32
b(:=)61 b Fm(C)7 b Fp(;)-116 4655 y(\(15\))673 b(insert)29
b Fm(w)k Fp(in)m(to)e(comp)s(onen)m(t)f Fm(C)-116 4780
y Fp(\(16\))506 b Fo(end)-116 4905 y Fp(\(17\))340 b
Fo(end)30 b(else)h Fn(push)n Fp(\()p Fm(v)s(;)15 b Fl(stack)r
Fp(\);)-116 5031 y(\(18\))173 b Fo(end)p Fp(;)-116 5156
y(\(19\))g Fo(b)s(egin)31 b Fp(/*)g(Main)f(program)g(*/)-116
5281 y(\(20\))340 b(Initialize)28 b Fl(stack)j Fp(to)g(con)m(tain)g(a)f
(v)-5 b(alue)30 b Fm(<)g Fp(an)m(y)h(v)m(ertex)g(in)f
Fm(V)20 b Fp(;)-116 5407 y(\(21\))340 b Fo(for)30 b(eac)m(h)h
Fp(v)m(ertex)h Fm(v)c Fk(2)d Fm(V)51 b Fo(do)-116 5532
y Fp(\(22\))506 b Fo(if)31 b Fm(v)i Fp(is)d(not)g(already)g(visited)f
Fo(then)h Fn(visit1)q Fp(\()p Fm(v)s Fp(\))-116 5657
y(\(23\))173 b Fo(end)p Fp(.)248 5838 y Fq(Figure)37
b(3.4)p Fu(:)43 b(Algorithm)30 b Fq(newscc)p Fn(1)i Fu(stores)i(only)e
(nonro)s(ot)f(v)m(ertices)j(on)f(the)g(stac)m(k.)p eop
43 8 bop 3778 -294 a Fu(43)-116 18 y(based)43 b(on)g(this)f(observ)-5
b(ation.)73 b(The)43 b(recursiv)m(e)h(pro)s(cedure)g
Fq(visit)p Fn(1)e Fu(in)g(algorithm)e Fq(newscc)p Fn(1)i
Fu(stores)h(a)-116 152 y(v)m(ertex)34 b Fs(v)i Fu(on)m(to)c(the)h(stac)
m(k)h(only)e(after)g(it)f(has)i(pro)s(cessed)h(all)c(edges)k(lea)m
(ving)d Fs(v)36 b Fu(and)d(kno)m(ws)h(that)e Fs(v)k Fu(is)c(not)-116
286 y(a)h(comp)s(onen)m(t)g(ro)s(ot)g(\(at)g(line)f(17\).)45
b(Since)34 b(the)g(ro)s(ot)e(v)m(ertex)j(is)e(not)h(on)f(the)h(stac)m
(k)g(when)h(the)f(comp)s(onen)m(t)-116 419 y(is)f(detected,)i(the)e
(stac)m(k)i(is)e(pro)s(cessed)i(sligh)m(tly)c(di\013eren)m(tly)i(in)g
Fq(newscc)p Fn(1)f Fu(compared)h(to)g(T)-8 b(arjan's)34
b(algo-)-116 553 y(rithm.)50 b(Eac)m(h)36 b(nonro)s(ot)f(v)m(ertex)i
(of)e(a)g(comp)s(onen)m(t)g(is)g(greater)g(than)h(the)g(ro)s(ot)e(in)h
(the)g(depth-\014rst)i(order.)-116 686 y(Therefore)i(\(at)f(lines)g
(12{16\),)h(w)m(e)g(remo)m(v)m(e)g(v)m(ertices)h(from)d(the)i(stac)m(k)
h(as)f(long)e(as)h(the)h(topmost)f(v)m(ertex)-116 820
y(is)g(greater)h(than)g(the)g(ro)s(ot)f(v)m(ertex)j(\(in)d(the)i
(depth-\014rst)f(order\))g(and)g(assign)g Fs(C)46 b Fu(to)38
b Fr(Comp)o Fu(\()p Fs(w)s Fu(\))h(for)f(eac)m(h)-116
954 y(nonro)s(ot)i(v)m(ertex)j Fs(w)h Fu(of)d(the)g(comp)s(onen)m(t.)70
b(T)-8 b(o)41 b(prev)m(en)m(t)i(stac)m(k)g(under\015o)m(w,)i(the)c
(stac)m(k)i(is)e(initialized)c(to)-116 1087 y(con)m(tain)30
b(a)g(sen)m(tinel)g(v)-5 b(alue)30 b(smaller)f(than)h(an)m(y)h(v)m
(ertex)h(of)e(the)h(input)f(graph.)43 b(The)31 b Fr(Comp)f
Fu(v)-5 b(ariable)28 b(of)i(the)-116 1221 y(ro)s(ot)h(v)m(ertex)k(is)d
(set)h(at)f(line)g(9.)-116 1445 y Fj(Example)g(3.2.)71
b Fu(Consider)29 b(again)e(the)i(graph)g(in)f(Figure)j(3.2\(a\).)42
b(In)29 b(Figure)i(3.5,)e(w)m(e)h(presen)m(t)g(the)g(trace)-116
1579 y(of)h(one)i(p)s(ossible)e(application)f(of)h Fq(newscc)p
Fn(1)h Fu(to)g(the)g(graph.)43 b(W)-8 b(e)33 b(assume)f(that)g(the)h
(execution)g(starts)f(at)-116 1712 y(v)m(ertex)39 b Fs(a)p
Fu(,)g(and)f(that)f(the)h(v)m(ertices)h(adjacen)m(t)f(from)f(a)g(v)m
(ertex)j Fs(v)h Fu(are)c(pro)s(cessed)j(in)d(the)h(order)f(in)g(whic)m
(h)-116 1846 y(they)d(app)s(ear)f(in)g(the)g(adjacency)i(list)d(of)h
Fs(v)t Fu(.)45 b(The)34 b(adjacency)h(lists)d(are)h(presen)m(ted)j(in)c
(Figure)g(3.2\(b\).)45 b(As)-116 1980 y(w)m(e)33 b(see,)g
Fq(newscc)p Fn(1)e Fu(stores)i(only)f(six)g(v)m(ertices)h(on)m(to)f
Fr(stack)o Fu(,)g(whereas)i(T)-8 b(arjan's)32 b(algorithm)d(stores)k
(all)c(ten)-116 2113 y(v)m(ertices)34 b(on)e Fr(stack)p
Fu(.)p 654 2113 4 67 v 658 2050 59 4 v 658 2113 V 716
2113 4 67 v -116 2427 a Fj(Theorem)54 b(3.6.)47 b Fu(Algorithm)e
Fq(newscc)p Fn(1)o Fu(,)51 b(presen)m(ted)f(in)d(Figure)31
b(3.4,)51 b(correctly)c(detects)i(the)f(strong)-116 2560
y(comp)s(onen)m(ts)33 b(of)f(the)h(input)f(graph.)-116
2783 y Fj(Pro)s(of.)108 b Fu(The)41 b(pro)s(of)d(is)h(similar)d(to)j
(the)h(correctness)h(pro)s(of)e(of)f(T)-8 b(arjan's)40
b(algorithm)c(ab)s(o)m(v)m(e.)65 b(W)-8 b(e)40 b(can)-116
2917 y(sho)m(w)c(that)f(giv)m(en)h(a)f(comp)s(onen)m(t)g
Fs(C)42 b Fu(with)35 b(ro)s(ot)g Fs(r)s Fu(:)48 b Fj(\(a\))35
b Fu(for)g(eac)m(h)h(v)m(ertex)i Fs(x)d Fu(in)g Fs(C)7
b Fu(,)36 b Fr(Fcr)o Fu(\()p Fs(x)p Fu(\))g(is)f(in)f
Fs(C)7 b Fu(,)36 b Fj(\(b\))-116 3050 y Fr(Fcr)o Fu(\()p
Fs(r)s Fu(\))i(=)g Fs(r)s Fu(,)h(and)g Fj(\(c\))f Fu(for)g(eac)m(h)h
(nonro)s(ot)f(v)m(ertex)j Fs(x)e Fu(of)f Fs(C)7 b Fu(,)40
b Fr(Fcr)o Fu(\()p Fs(x)p Fu(\))f Fs(<)2597 3065 y Fe(\034)2678
3050 y Fs(x)p Fu(.)62 b(The)39 b(only)f(di\013erence)h(is)g(in)-116
3184 y(sho)m(wing)33 b(ho)m(w)h Fj(\(b\))e Fu(and)h Fj(\(c\))e
Fu(imply)h Fj(\(d\))p Fu(,)g(the)h(correct)h(detection)e(of)g(comp)s
(onen)m(t)h Fs(C)7 b Fu(.)-137 3408 y Fj(\(d\))85 b Fu(Let)31
b Fs(C)37 b Fu(b)s(e)30 b(a)g(comp)s(onen)m(t)h(with)e(ro)s(ot)h
Fs(r)s Fu(.)42 b(Similarly)26 b(to)k(Lemma)f(3.1)h(w)m(e)h(can)g(sho)m
(w)g(that)f(all)f(v)m(ertices)98 3542 y(of)40 b Fs(C)47
b Fu(are)40 b(visited)g(during)f(the)i(execution)f(of)g
Fq(visit)p Fn(1)p Fu(\()p Fs(r)s Fu(\).)66 b(By)41 b
Fj(\(c\))p Fu(,)g(the)g(condition)e Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(v)t Fu(\))40 b(=)g Fs(v)98 3675 y Fu(at)c(line)e(8)i(fails)e
(for)i(eac)m(h)g(nonro)s(ot)g(v)m(ertex)h Fs(v)t Fu(.)54
b(Th)m(us,)38 b(eac)m(h)f(nonro)s(ot)e(v)m(ertex)j(is)d(inserted)i(on)m
(to)e(the)98 3809 y(stac)m(k)45 b(at)f(line)e(17.)76
b(If)44 b Fs(C)50 b Fu(is)44 b(at)f(lev)m(el)g Fs(l)49
b(>)e Fu(0,)f(eac)m(h)e(comp)s(onen)m(t)g(other)g(than)g
Fs(C)50 b Fu(visited)44 b(during)98 3943 y(the)49 b(execution)g(of)e
Fq(visit)p Fn(1)p Fu(\()p Fs(r)s Fu(\))h(is)g(at)f(a)h(lev)m(el)g(b)s
(elo)m(w)g Fs(l)r Fu(.)90 b(By)49 b(the)f(induction)f(h)m(yp)s
(othesis,)54 b(these)98 4076 y(comp)s(onen)m(ts)39 b(are)g(correctly)g
(detected.)64 b(If)38 b Fs(C)46 b Fu(is)38 b(at)h(lev)m(el)f(zero,)j
(no)d(other)h(comp)s(onen)m(t)g(is)f(visited)98 4210
y(during)i(the)g(execution)h(of)f Fq(visit)p Fn(1)p Fu(\()p
Fs(r)s Fu(\).)66 b(Th)m(us,)44 b(the)c(pro)s(cessing)h(of)e(other)i
(comp)s(onen)m(ts)f(do)s(es)h(not)98 4343 y(remo)m(v)m(e)e(v)m(ertices)
g(of)e Fs(C)45 b Fu(from)36 b(the)j(stac)m(k.)60 b(Eac)m(h)39
b(v)m(ertex)g(of)f Fs(C)44 b Fu(inserted)39 b(on)m(to)e(the)i(stac)m(k)
g(remains)98 4477 y(there)46 b(un)m(til)d(the)i(condition)f
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))48 b(=)g Fs(v)g
Fu(is)d(satis\014ed)g(for)f(some)h(v)m(ertex)h Fs(v)i
Fu(of)d Fs(C)51 b Fu(at)45 b(line)e(8)i(in)98 4611 y
Fq(visit)p Fn(1)p Fu(\()p Fs(v)t Fu(\).)50 b(By)36 b
Fj(\(b\))e Fu(and)h Fj(\(c\))p Fu(,)g(the)g(condition)e(is)h
(satis\014ed)h(only)g(for)f(the)h(ro)s(ot)f Fs(r)s Fu(.)49
b(Since)35 b(all)e(other)98 4744 y(comp)s(onen)m(ts)c(pro)s(cessed)i
(during)d Fq(visit)p Fu(\()p Fs(r)s Fu(\))g(are)g(correctly)h
(detected,)i(the)e(v)m(ertices)h(of)e Fs(C)36 b Fu(are)28
b(on)h(top)98 4878 y(of)41 b(the)i(stac)m(k.)72 b(Since)41
b Fs(r)46 b(<)1140 4893 y Fe(\034)1226 4878 y Fs(w)e
Fu(for)d(eac)m(h)i(nonro)s(ot)e(v)m(ertex)i Fs(w)s Fu(,)h(eac)m(h)e
(nonro)s(ot)f(v)m(ertex)j Fs(w)g Fu(of)d Fs(C)48 b Fu(is)98
5012 y(remo)m(v)m(ed)32 b(from)d(the)j(stac)m(k)g(at)e(lines)g(12{16)g
(in)g Fq(visit)p Fn(1)p Fu(\()p Fs(r)s Fu(\))g(and)h
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))f(is)g(set)i(to)e Fs(C)7
b Fu(.)43 b Fr(Comp)o Fu(\()p Fs(r)s Fu(\))30 b(is)98
5145 y(set)35 b(to)e Fs(C)41 b Fu(at)34 b(line)e(10.)47
b(When)35 b Fq(visit)p Fn(1)f Fu(exits)g Fs(r)s Fu(,)g(the)h(con)m(ten)
m(ts)g(of)f(the)g(stac)m(k)h(is)f(the)g(same)g(as)g(it)f(w)m(as)98
5279 y(when)h Fs(r)h Fu(w)m(as)f(en)m(tered.)45 b(Th)m(us,)34
b Fs(C)39 b Fu(is)33 b(correctly)f(detected.)p 2315 5279
V 2319 5216 59 4 v 2319 5279 V 2377 5279 4 67 v -116
5501 a Fj(Theorem)37 b(3.7.)c Fu(Algorithm)d Fq(newscc)p
Fn(1)i Fu(runs)i(in)e(\002\()p Fs(n)22 b Fu(+)g Fs(e)p
Fu(\))33 b(time,)f(where)i Fs(n)e Fu(and)h Fs(e)g Fu(are)g(the)g(n)m
(um)m(b)s(er)g(of)-116 5635 y(v)m(ertices)h(and)e(the)h(n)m(um)m(b)s
(er)g(of)f(edges)i(in)e(the)h(input)f(graph,)g(resp)s(ectiv)m(ely)-8
b(.)-116 5858 y Fj(Pro)s(of.)80 b Fu(Similar)29 b(to)k(the)g(pro)s(of)e
(of)h(Theorem)h(3.4.)p 1863 5858 V 1867 5795 59 4 v 1867
5858 V 1925 5858 4 67 v eop
44 9 bop -116 -294 a Fu(44)547 6 y(Op)s(eration)p 1453
44 4 126 v 525 w(Stac)m(k)p 1829 44 V 144 w(Op)s(eration)p
2777 44 V 517 w(Stac)m(k)p 497 47 2736 4 v 547 135 a
Fl(enter)p Fp(\()p Fm(a)p Fp(\))p 1453 173 4 126 v 636
w(\(\))p 1829 173 V 427 w Fl(Comp)r Fp(\()p Fm(f)10 b
Fp(\))30 b(:=)g Fm(C)2580 149 y Fi(2)p 2777 173 V 2829
135 a Fp(\()p Fm(g)s(;)15 b(b;)g(c)p Fp(\))607 260 y
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(a)p Fp(\))31 b(:=)g Fm(a)p
1453 298 V 393 w Fp(\(\))p 1829 298 V 427 w Fn(pop)p
Fp(\()p Fl(stack)p Fp(\))p 2777 298 V 401 w(\()p Fm(b;)15
b(c)p Fp(\))607 386 y Fl(enter)p Fp(\()p Fm(b)p Fp(\))p
1453 423 V 585 w(\(\))p 1829 423 V 427 w Fl(Comp)r Fp(\()p
Fm(g)s Fp(\))31 b(:=)g Fm(C)2573 400 y Fi(2)p 2777 423
V 2829 386 a Fp(\()p Fm(b;)15 b(c)p Fp(\))668 511 y Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(b)p Fp(\))31 b(:=)f Fm(b)p 1453
549 V 351 w Fp(\(\))p 1829 549 V 367 w Fl(exit)p Fp(\()p
Fm(f)10 b Fp(\))p 2777 549 V 621 w(\()p Fm(b;)15 b(c)p
Fp(\))668 636 y Fl(enter)p Fp(\()p Fm(c)p Fp(\))p 1453
674 V 524 w(\(\))p 1829 674 V 367 w Fl(enter)p Fp(\()p
Fm(h)p Fp(\))p 2777 674 V 563 w(\()p Fm(b;)g(c)p Fp(\))728
762 y Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(c)p Fp(\))31 b(:=)f
Fm(c)p 1453 799 V 290 w Fp(\(\))p 1829 799 V 427 w Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(h)p Fp(\))32 b(:=)e Fm(h)p 2777
799 V 316 w Fp(\()p Fm(b;)15 b(c)p Fp(\))728 887 y Fl(enter)q
Fp(\()p Fm(d)p Fp(\))p 1453 925 V 455 w(\(\))p 1829 925
V 427 w Fl(enter)q Fp(\()p Fm(i)p Fp(\))p 2777 925 V
523 w(\()p Fm(b;)g(c)p Fp(\))789 1012 y Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(d)p Fp(\))31 b(:=)g Fm(d)p 1453 1050 V 213
w Fp(\(\))p 1829 1050 V 488 w Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(i)p Fp(\))31 b(:=)g Fm(i)p 2777 1050 V 297 w Fp(\()p
Fm(b;)15 b(c)p Fp(\))789 1138 y Fl(enter)p Fp(\()p Fm(e)p
Fp(\))p 1453 1175 V 400 w(\(\))p 1829 1175 V 488 w Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(i)p Fp(\))31 b(:=)g Fm(h)p 2777
1175 V 276 w Fp(\()p Fm(b;)15 b(c)p Fp(\))850 1263 y
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(e)p Fp(\))31 b(:=)f Fm(e)p
1453 1301 V 163 w Fp(\(\))p 1829 1301 V 488 w Fl(enter)p
Fp(\()p Fm(j)5 b Fp(\))p 2777 1301 V 452 w(\()p Fm(b;)15
b(c)p Fp(\))850 1388 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(e)p
Fp(\))31 b(:=)f Fm(d)p 1453 1426 V 158 w Fp(\(\))p 1829
1426 V 549 w Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(j)5 b Fp(\))31
b(:=)g Fm(j)p 2777 1426 V 219 w Fp(\()p Fm(b;)15 b(c)p
Fp(\))850 1514 y Fn(push)n Fp(\()p Fm(e;)g Fl(stack)r
Fp(\))p 1453 1551 V 100 w(\()p Fm(e)p Fp(\))p 1829 1551
V 507 w(create)31 b Fm(C)2455 1528 y Fi(3)p 2777 1551
V 2829 1514 a Fp(\()p Fm(b;)15 b(c)p Fp(\))789 1639 y
Fl(exit)p Fp(\()p Fm(e)p Fp(\))p 1453 1677 V 461 w(\()p
Fm(e)p Fp(\))p 1829 1677 V 507 w Fl(Comp)q Fp(\()p Fm(j)5
b Fp(\))32 b(:=)e Fm(C)2690 1653 y Fi(3)p 2777 1677 V
2829 1639 a Fp(\()p Fm(b;)15 b(c)p Fp(\))789 1764 y(create)32
b Fm(C)1122 1778 y Fi(1)p 1453 1802 V 1504 1764 a Fp(\()p
Fm(e)p Fp(\))p 1829 1802 V 446 w Fl(exit)p Fp(\()p Fm(j)5
b Fp(\))p 2777 1802 V 513 w(\()p Fm(b;)15 b(c)p Fp(\))789
1890 y Fl(Comp)q Fp(\()p Fm(d)p Fp(\))32 b(:=)e Fm(C)1361
1904 y Fi(1)p 1453 1927 V 1504 1890 a Fp(\()p Fm(e)p
Fp(\))p 1829 1927 V 446 w Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(i)p Fp(\))31 b(:=)g Fm(b)p 2777 1927 V 289 w Fp(\()p
Fm(b;)15 b(c)p Fp(\))789 2015 y Fn(pop)o Fp(\()p Fl(stack)q
Fp(\))p 1453 2053 V 288 w(\(\))p 1829 2053 V 488 w Fn(push)o
Fp(\()p Fm(i;)g Fl(stack)q Fp(\))p 2777 2053 V 224 w(\()p
Fm(b;)g(c)p Fp(\))789 2140 y Fl(Comp)q Fp(\()p Fm(e)p
Fp(\))32 b(:=)e Fm(C)1356 2154 y Fi(1)p 1453 2178 V 1504
2140 a Fp(\(\))p 1829 2178 V 427 w Fl(exit)p Fp(\()p
Fm(i)p Fp(\))p 2777 2178 V 585 w(\()p Fm(i;)15 b(b;)g(c)p
Fp(\))728 2266 y Fl(exit)p Fp(\()p Fm(d)p Fp(\))p 1453
2303 V 517 w(\(\))p 1829 2303 V 427 w Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(h)p Fp(\))32 b(:=)e Fm(b)p 2777 2303 V 329
w Fp(\()p Fm(i;)15 b(b;)g(c)p Fp(\))728 2391 y Fl(R)-5
b(o)g(ot)s Fp(\()p Fm(c)p Fp(\))31 b(:=)f Fm(b)p 1453
2429 V 290 w Fp(\(\))p 1829 2429 V 427 w Fn(push)o Fp(\()p
Fm(h;)15 b Fl(stack)r Fp(\))p 2777 2429 V 263 w(\()p
Fm(h;)g(i;)g(b;)g(c)p Fp(\))728 2516 y Fn(push)o Fp(\()p
Fm(c;)g Fl(stack)r Fp(\))p 1453 2554 V 224 w(\()p Fm(c)p
Fp(\))p 1829 2554 V 328 w Fl(exit)p Fp(\()p Fm(h)p Fp(\))p
2777 2554 V 624 w(\()p Fm(h;)g(i;)g(b;)g(c)p Fp(\))668
2642 y Fl(exit)p Fp(\()p Fm(c)p Fp(\))p 1453 2679 V 585
w(\()p Fm(c)p Fp(\))p 1829 2679 V 328 w(create)32 b Fm(C)2274
2656 y Fi(4)p 2777 2679 V 2829 2642 a Fp(\()p Fm(h;)15
b(i;)g(b;)g(c)p Fp(\))668 2767 y Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(b)p Fp(\))31 b(:=)f Fm(a)p 1453 2805 V 342 w Fp(\()p
Fm(c)p Fp(\))p 1829 2805 V 328 w Fl(Comp)q Fp(\()p Fm(a)p
Fp(\))h(:=)f Fm(C)2513 2781 y Fi(4)p 2777 2805 V 2829
2767 a Fp(\()p Fm(h;)15 b(i;)g(b;)g(c)p Fp(\))668 2892
y Fn(push)o Fp(\()p Fm(b;)g Fl(stack)q Fp(\))p 1453 2930
V 285 w(\()p Fm(b;)g(c)p Fp(\))p 1829 2930 V 249 w Fn(pop)o
Fp(\()p Fl(stack)q Fp(\))p 2777 2930 V 461 w(\()p Fm(i;)g(b;)g(c)p
Fp(\))607 3018 y Fl(exit)p Fp(\()p Fm(b)p Fp(\))p 1453
3055 V 646 w(\()p Fm(b;)g(c)p Fp(\))p 1829 3055 V 249
w Fl(Comp)q Fp(\()p Fm(h)p Fp(\))31 b(:=)g Fm(C)2518
3032 y Fi(4)p 2777 3055 V 2829 3018 a Fp(\()p Fm(i;)15
b(b;)g(c)p Fp(\))607 3143 y Fl(enter)p Fp(\()p Fm(f)10
b Fp(\))p 1453 3181 V 569 w(\()p Fm(b;)15 b(c)p Fp(\))p
1829 3181 V 249 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p
2777 3181 V 461 w(\()p Fm(b;)g(c)p Fp(\))668 3268 y Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(f)10 b Fp(\))30 b(:=)h Fm(f)p 1453
3306 V 329 w Fp(\()p Fm(b;)15 b(c)p Fp(\))p 1829 3306
V 249 w Fl(Comp)q Fp(\()p Fm(i)p Fp(\))31 b(:=)g Fm(C)2497
3282 y Fi(4)p 2777 3306 V 2829 3268 a Fp(\()p Fm(b;)15
b(c)p Fp(\))668 3394 y Fl(enter)p Fp(\()p Fm(g)s Fp(\))p
1453 3431 V 517 w(\()p Fm(b;)g(c)p Fp(\))p 1829 3431
V 249 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p 2777 3431
V 461 w(\()p Fm(c)p Fp(\))728 3519 y Fl(R)-5 b(o)g(ot)s
Fp(\()p Fm(g)s Fp(\))31 b(:=)f Fm(g)p 1453 3557 V 279
w Fp(\()p Fm(b;)15 b(c)p Fp(\))p 1829 3557 V 249 w Fl(Comp)q
Fp(\()p Fm(b)p Fp(\))31 b(:=)f Fm(C)2504 3533 y Fi(4)p
2777 3557 V 2829 3519 a Fp(\()p Fm(c)p Fp(\))728 3644
y Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(g)s Fp(\))31 b(:=)f Fm(f)p
1453 3682 V 277 w Fp(\()p Fm(b;)15 b(c)p Fp(\))p 1829
3682 V 249 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p 2777
3682 V 461 w(\(\))728 3770 y Fn(push)o Fp(\()p Fm(g)s(;)g
Fl(stack)r Fp(\))p 1453 3807 V 217 w(\()p Fm(g)s(;)g(b;)g(c)p
Fp(\))p 1829 3807 V 163 w Fl(Comp)q Fp(\()p Fm(c)p Fp(\))31
b(:=)g Fm(C)2505 3784 y Fi(4)p 2777 3807 V 2829 3770
a Fp(\(\))668 3895 y Fl(exit)p Fp(\()p Fm(g)s Fp(\))p
1453 3933 V 578 w(\()p Fm(g)s(;)15 b(b;)g(c)p Fp(\))p
1829 3933 V 102 w Fl(exit)p Fp(\()p Fm(a)p Fp(\))p 2777
3933 V 689 w(\(\))668 4020 y(create)32 b Fm(C)1001 4034
y Fi(2)p 1453 4058 V 1504 4020 a Fp(\()p Fm(g)s(;)15
b(b;)g(c)p Fp(\))p 1829 4058 V 2777 4058 V 345 4218 a
Fq(Figure)38 b(3.5)p Fu(:)43 b(The)34 b(trace)f(of)f
Fq(newscc)p Fn(1)g Fu(applied)f(to)h(the)h(graph)g(of)f(Figure)f(3.2.)
30 4516 y(W)-8 b(e)25 b(examine)e(no)m(w)i(the)f(p)s(ossibilit)m(y)e
(to)i(further)g(reduce)i(the)e(second)i(tra)m(v)m(ersal)e(in)g(T)-8
b(arjan's)24 b(algorithm.)-116 4649 y(Ob)m(viously)-8
b(,)48 b(if)c(w)m(e)j(ha)m(v)m(e)f(to)f(output)h(the)f(comp)s(onen)m
(ts,)k(w)m(e)e(need)f(an)f(access)i(to)e(eac)m(h)i(v)m(ertex)g(of)d
(the)-116 4783 y(comp)s(onen)m(t.)i(But)34 b(if)e(w)m(e)j(only)e(w)m
(an)m(t)h(to)g(detect)g(the)g(comp)s(onen)m(t)g(ro)s(ots,)f(for)g
(instance,)i(to)e(compute)g(the)-116 4916 y(n)m(um)m(b)s(er)g(of)f
(strong)g(comp)s(onen)m(ts,)i(w)m(e)f(can)g(do)g(b)s(etter)f(than)h(in)
f Fq(newscc)p Fn(1)o Fu(.)30 5056 y(Examine)47 b(line)e(7)i(in)f
(Figure)32 b(3.1.)86 b(This)48 b(is)e(the)i(only)e(place)h(where)h(w)m
(e)g(test)g(whether)g(the)g(c)m(hild)-116 5190 y(v)m(ertex)h
Fs(w)h Fu(b)s(elongs)e(to)f(the)h(same)g(comp)s(onen)m(t)g(as)g(v)m
(ertex)i Fs(v)t Fu(.)88 b(Note)48 b(that)g Fs(w)i Fu(b)s(elongs)d(to)h
(the)g(same)-116 5323 y(comp)s(onen)m(t)36 b(as)h Fs(v)k
Fu(i\013)35 b Fr(R)-5 b(o)g(ot)q Fu(\()p Fs(w)s Fu(\))35
b(b)s(elongs)i(to)f(the)h(same)g(comp)s(onen)m(t)f(as)h
Fs(v)t Fu(.)56 b(T)-8 b(ests)38 b Fr(Comp)o Fu(\()p Fs(w)s
Fu(\))c(=)h Fr(Nil)i Fu(and)-116 5457 y Fr(Comp)o Fu(\()p
Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(w)s Fu(\)\))30 b(=)i Fr(Nil)i
Fu(alw)m(a)m(ys)i(yield)d(the)j(same)e(result.)50 b(If)34
b(w)m(e)i(replace)f(the)g(test)g Fr(Comp)o Fu(\()p Fs(w)s
Fu(\))c(=)g Fr(Nil)k Fu(b)m(y)-116 5591 y(the)29 b(test)g
Fr(Comp)o Fu(\()p Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(w)s Fu(\)\))27
b(=)g Fr(Nil)p Fu(,)j(w)m(e)f(only)f(ha)m(v)m(e)i(to)e(access)i(and)f
(mo)s(dify)d(the)j Fr(Comp)f Fu(v)-5 b(alues)28 b(of)g(the)h(\014nal)
-116 5724 y(candidate)37 b(ro)s(ots.)58 b(When)39 b(a)e(comp)s(onen)m
(t)h Fs(C)44 b Fu(is)37 b(detected,)k(it)36 b(su\016ces)k(to)d(set)i
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))c(=)h Fs(C)45 b Fu(for)37
b(eac)m(h)-116 5858 y(\014nal)32 b(candidate)g(ro)s(ot)g
Fs(w)j Fu(in)c(comp)s(onen)m(t)i Fs(C)7 b Fu(.)p eop
45 10 bop 3778 -294 a Fu(45)-116 6 y Fp(\(1\))218 b Fo(pro)s(cedure)31
b Fn(visit2)q Fp(\()p Fm(v)s Fp(\);)-116 132 y(\(2\))218
b Fo(b)s(egin)-116 257 y Fp(\(3\))385 b Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b Fm(v)s Fp(;)31 b Fl(Comp)q
Fp(\()p Fm(v)s Fp(\))g(:=)61 b Fl(Nil)p Fp(;)-116 382
y(\(4\))385 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h Fm(w)g
Fp(suc)m(h)e(that)h(\()p Fm(v)s(;)15 b(w)r Fp(\))28 b
Fk(2)c Fm(E)36 b Fo(do)31 b(b)s(egin)-116 508 y Fp(\(5\))551
b Fo(if)31 b Fm(w)i Fp(is)c(not)i(already)f(visited)e
Fo(then)i Fn(visit2)q Fp(\()p Fm(w)r Fp(\);)-116 633
y(\(6\))551 b Fo(if)31 b Fl(Comp)q Fp(\()p Fl(R)-5 b(o)g(ot)s
Fp(\()p Fm(w)r Fp(\)\))26 b(=)f Fl(Nil)30 b Fo(then)g
Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(v)s Fp(\))31 b(:=)60 b
Fn(min)q Fp(\()p Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))p
Fm(;)15 b Fl(R)-5 b(o)g(ot)t Fp(\()p Fm(w)r Fp(\)\))-116
758 y(\(7\))385 b Fo(end)p Fp(;)-116 884 y(\(8\))g Fo(if)30
b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))26 b(=)f Fm(v)34
b Fo(then)c(b)s(egin)-116 1009 y Fp(\(9\))551 b(create)32
b(a)f(new)f(comp)s(onen)m(t)h Fm(C)7 b Fp(;)-116 1134
y(\(10\))506 b Fo(if)31 b Fn(top)o Fp(\()p Fl(stack)q
Fp(\))25 b Fk(\025)56 b Fm(v)33 b Fo(then)-116 1260 y
Fp(\(11\))673 b Fo(rep)s(eat)-116 1385 y Fp(\(12\))840
b Fm(w)33 b Fp(:=)60 b Fn(pop)o Fp(\()p Fl(stack)q Fp(\);)-116
1510 y(\(13\))840 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))32
b(:=)60 b Fm(C)-116 1636 y Fp(\(14\))673 b Fo(un)m(til)30
b Fn(top)p Fp(\()p Fl(stack)p Fp(\))c Fm(<)f(v)s Fp(;)-116
1761 y(\(15\))506 b Fo(else)31 b Fl(Comp)q Fp(\()p Fm(v)s
Fp(\))h(:=)60 b Fm(C)7 b Fp(;)-116 1886 y(\(16\))340
b Fo(end)30 b(else)h(if)f Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(v)s Fp(\))31 b(is)f(not)g(on)h Fl(stack)f Fo(then)g
Fn(push)o Fp(\()p Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(v)s Fp(\))p
Fm(;)15 b Fl(stack)r Fp(\);)-116 2012 y(\(17\))173 b
Fo(end)p Fp(;)-116 2137 y(\(18\))g Fo(b)s(egin)31 b Fp(/*)g(Main)f
(program)g(*/)-116 2262 y(\(19\))340 b(Initialize)28
b Fl(stack)j Fp(to)g(con)m(tain)g(a)f(v)-5 b(alue)30
b Fm(<)g Fp(an)m(y)h(v)m(ertex)g(in)f Fm(V)20 b Fp(;)-116
2388 y(\(20\))340 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h
Fm(v)c Fk(2)d Fm(V)51 b Fo(do)-116 2513 y Fp(\(21\))506
b Fo(if)31 b Fm(v)i Fp(is)d(not)g(already)g(visited)f
Fo(then)h Fn(visit2)q Fp(\()p Fm(v)s Fp(\))-116 2638
y(\(22\))173 b Fo(end)p Fp(.)-116 2820 y Fq(Figure)39
b(3.6)p Fu(:)48 b(Algorithm)32 b Fq(newscc)p Fn(2)i Fu(stores)i(only)e
(\014nal)g(candidate)g(ro)s(ots)h(of)f(non)m(trivial)e(comp)s(onen)m
(ts)-116 2928 y(on)g(the)h(stac)m(k.)30 3256 y(Our)49
b(second)h(impro)m(v)m(ed)e(v)m(ersion)h(of)g(T)-8 b(arjan's)49
b(algorithm,)g(called)f Fq(newscc)p Fn(2)g Fu(and)h(presen)m(ted)i(in)
-116 3389 y(Figure)31 b(3.6,)53 b(is)48 b(based)h(on)g(this)f(idea.)91
b(Pro)s(cedure)50 b Fq(visit)p Fn(2)f Fu(stores)g(eac)m(h)h(\014nal)e
(candidate)g(ro)s(ot)g(of)g(a)-116 3523 y(non)m(trivial)40
b(comp)s(onen)m(t)j(on)m(to)f(the)h(stac)m(k)h(at)e(line)f(16.)73
b(When)43 b(a)f(non)m(trivial)f(comp)s(onen)m(t)h(is)g(detected,)-116
3656 y(its)36 b(\014nal)g(candidate)h(ro)s(ot)e(v)m(ertices)j(\(at)f
(least)f(one)h(exists\))h(are)f(on)f(top)h(of)f(the)h(stac)m(k.)58
b Fq(visit)p Fn(2)37 b Fu(remo)m(v)m(es)-116 3790 y(v)m(ertices)d(from)
d(the)j(stac)m(k)g(un)m(til)d(the)i(topmost)f(v)m(ertex)j(is)d(smaller)
f(than)i(the)g(actual)f(ro)s(ot)g(v)m(ertex)i(\(in)e(the)-116
3924 y(depth-\014rst)37 b(order\))g(and)g(assigns)g Fs(C)44
b Fu(to)36 b(their)h Fr(Comp)f Fu(v)-5 b(ariables)35
b(at)i(lines)e(10{14.)56 b(If)36 b(the)h(comp)s(onen)m(t)g(is)-116
4057 y(trivial,)i(the)i(algorithm)c(only)i(sets)i Fr(Comp)o
Fu(\()p Fs(v)t Fu(\))f(=)h Fs(C)47 b Fu(\(at)39 b(line)g(15\).)65
b(T)-8 b(o)41 b(prev)m(en)m(t)h(stac)m(k)f(under\015o)m(w,)i(the)-116
4191 y(stac)m(k)34 b(is)e(initialized)d(to)j(con)m(tain)g(a)g(sen)m
(tinel)h(v)-5 b(alue)32 b(smaller)e(than)j(an)m(y)g(v)m(ertex)h(of)f
(the)g(input)f(graph.)-116 4562 y Fj(Example)g(3.3.)71
b Fu(Consider)29 b(again)e(the)i(graph)g(in)f(Figure)j(3.2\(a\).)42
b(In)29 b(Figure)i(3.7,)e(w)m(e)h(presen)m(t)g(the)g(trace)-116
4696 y(of)g(one)h(p)s(ossible)g(application)d(of)j Fq(newscc)p
Fn(2)f Fu(on)h(the)g(graph.)43 b(W)-8 b(e)31 b(assume)h(that)f(the)g
(execution)h(starts)f(at)-116 4830 y(v)m(ertex)39 b Fs(a)p
Fu(,)g(and)f(that)f(the)h(v)m(ertices)h(adjacen)m(t)f(from)f(a)g(v)m
(ertex)j Fs(v)h Fu(are)c(pro)s(cessed)j(in)d(the)h(order)f(in)g(whic)m
(h)-116 4963 y(they)d(app)s(ear)f(in)g(the)g(adjacency)i(list)d(of)h
Fs(v)t Fu(.)45 b(The)34 b(adjacency)h(lists)d(are)h(presen)m(ted)j(in)c
(Figure)g(3.2\(b\).)45 b(As)-116 5097 y(w)m(e)c(see,)j
Fq(newscc)p Fn(2)c Fu(stores)h(only)f(four)g(v)m(ertices)h(on)m(to)g
Fr(stack)o Fu(,)i(whereas)f(T)-8 b(arjan's)40 b(algorithm)e(stores)j
(all)-116 5231 y(ten)34 b(v)m(ertices)h(and)f Fq(newscc)p
Fn(1)f Fu(six)h(v)m(ertices)h(on)m(to)e Fr(stack)p Fu(.)47
b(The)35 b(four)e(v)m(ertices)i(stored)g(on)m(to)e Fr(stack)h
Fu(are)f(the)-116 5364 y(ro)s(ots)g(of)g(the)h(non)m(trivial)e(v)m
(ertices)j(and)e(v)m(ertex)j Fs(b)p Fu(,)e(whic)m(h)g(is)g(the)g
(\014nal)e(candidate)i(ro)s(ot)f(of)g(v)m(ertices)i Fs(c)p
Fu(,)f Fs(h)p Fu(,)-116 5498 y(and)e Fs(i)p Fu(.)43 b(Note)32
b(that)f Fq(newscc)p Fn(2)h Fu(c)m(hanges)h(the)f Fr(Comp)f
Fu(v)-5 b(ariables)30 b(of)h(only)g(\014v)m(e)i(v)m(ertices.)45
b(These)33 b(are)f(v)m(ertex)-116 5631 y Fs(b)h Fu(and)f(the)h(ro)s
(ots)g(of)f(the)h(comp)s(onen)m(ts.)p 1417 5631 4 67
v 1421 5568 59 4 v 1421 5631 V 1478 5631 4 67 v eop
46 11 bop -116 -294 a Fu(46)599 6 y(Op)s(eration)p 1510
44 4 126 v 530 w(Stac)m(k)p 1842 44 V 101 w(Op)s(eration)p
2791 44 V 517 w(Stac)m(k)p 549 47 2632 4 v 599 135 a
Fl(enter)p Fp(\()p Fm(a)p Fp(\))p 1510 173 4 126 v 641
w(\(\))p 1842 173 V 445 w Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(g)s Fp(\))32 b(:=)e Fm(f)p 2791 173 V 268 w Fp(\()p
Fm(a;)15 b(b)p Fp(\))659 260 y Fl(R)-5 b(o)g(ot)s Fp(\()p
Fm(a)p Fp(\))31 b(:=)f Fm(a)p 1510 298 V 398 w Fp(\(\))p
1842 298 V 445 w Fn(push)o Fp(\()p Fm(f)5 b(;)15 b Fl(stack)p
Fp(\))p 2791 298 V 206 w(\()p Fm(f)5 b(;)15 b(a;)g(b)p
Fp(\))659 386 y Fl(enter)q Fp(\()p Fm(b)p Fp(\))p 1510
423 V 589 w(\(\))p 1842 423 V 384 w Fl(exit)p Fp(\()p
Fm(g)s Fp(\))p 2791 423 V 570 w(\()p Fm(f)5 b(;)15 b(a;)g(b)p
Fp(\))720 511 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(b)p Fp(\))31
b(:=)g Fm(b)p 1510 549 V 355 w Fp(\(\))p 1842 549 V 384
w(create)h Fm(C)2348 525 y Fi(2)p 2791 549 V 2843 511
a Fp(\()p Fm(f)5 b(;)15 b(a;)g(b)p Fp(\))720 636 y Fl(enter)p
Fp(\()p Fm(c)p Fp(\))p 1510 674 V 529 w(\(\))p 1842 674
V 384 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p 2791 674
V 401 w(\()p Fm(a;)g(b)p Fp(\))781 762 y Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(c)p Fp(\))31 b(:=)f Fm(c)p 1510 799 V 295
w Fp(\(\))p 1842 799 V 384 w Fl(Comp)q Fp(\()p Fm(f)10
b Fp(\))31 b(:=)f Fm(C)2594 776 y Fi(2)p 2791 799 V 2843
762 a Fp(\()p Fm(a;)15 b(b)p Fp(\))781 887 y Fl(enter)p
Fp(\()p Fm(d)p Fp(\))p 1510 925 V 460 w(\(\))p 1842 925
V 324 w Fl(exit)p Fp(\()p Fm(f)10 b Fp(\))p 2791 925
V 621 w(\()p Fm(a;)15 b(b)p Fp(\))841 1012 y Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(d)p Fp(\))32 b(:=)e Fm(d)p 1510
1050 V 218 w Fp(\(\))p 1842 1050 V 324 w Fl(enter)p Fp(\()p
Fm(h)p Fp(\))p 2791 1050 V 563 w(\()p Fm(a;)15 b(b)p
Fp(\))841 1138 y Fl(enter)q Fp(\()p Fm(e)p Fp(\))p 1510
1175 V 404 w(\(\))p 1842 1175 V 384 w Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(h)p Fp(\))32 b(:=)e Fm(h)p 2791 1175 V 316
w Fp(\()p Fm(a;)15 b(b)p Fp(\))902 1263 y Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(e)p Fp(\))31 b(:=)g Fm(e)p 1510 1301 V 167
w Fp(\(\))p 1842 1301 V 384 w Fl(enter)p Fp(\()p Fm(i)p
Fp(\))p 2791 1301 V 524 w(\()p Fm(a;)15 b(b)p Fp(\))902
1388 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(e)p Fp(\))31 b(:=)g
Fm(d)p 1510 1426 V 162 w Fp(\(\))p 1842 1426 V 445 w
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(i)p Fp(\))31 b(:=)g Fm(i)p
2791 1426 V 297 w Fp(\()p Fm(a;)15 b(b)p Fp(\))902 1514
y Fn(push)o Fp(\()p Fm(d;)g Fl(stack)q Fp(\))p 1510 1551
V 100 w(\()p Fm(d)p Fp(\))p 1842 1551 V 398 w Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(i)p Fp(\))31 b(:=)g Fm(h)p 2791
1551 V 276 w Fp(\()p Fm(a;)15 b(b)p Fp(\))841 1639 y
Fl(exit)p Fp(\()p Fm(e)p Fp(\))p 1510 1677 V 466 w(\()p
Fm(d)p Fp(\))p 1842 1677 V 398 w Fl(enter)p Fp(\()p Fm(j)5
b Fp(\))p 2791 1677 V 452 w(\()p Fm(a;)15 b(b)p Fp(\))841
1764 y(create)32 b Fm(C)1174 1778 y Fi(1)p 1510 1802
V 1561 1764 a Fp(\()p Fm(d)p Fp(\))p 1842 1802 V 458
w Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(j)5 b Fp(\))31 b(:=)f
Fm(j)p 2791 1802 V 220 w Fp(\()p Fm(a;)15 b(b)p Fp(\))841
1890 y Fn(pop)p Fp(\()p Fl(stack)p Fp(\))p 1510 1927
V 293 w(\(\))p 1842 1927 V 505 w(create)32 b Fm(C)2469
1904 y Fi(3)p 2791 1927 V 2843 1890 a Fp(\()p Fm(a;)15
b(b)p Fp(\))841 2015 y Fl(Comp)r Fp(\()p Fm(d)p Fp(\))31
b(:=)f Fm(C)1413 2029 y Fi(1)p 1510 2053 V 1561 2015
a Fp(\(\))p 1842 2053 V 505 w Fl(Comp)r Fp(\()p Fm(j)5
b Fp(\))31 b(:=)g Fm(C)2704 2029 y Fi(3)p 2791 2053 V
2843 2015 a Fp(\()p Fm(a;)15 b(b)p Fp(\))781 2140 y Fl(exit)p
Fp(\()p Fm(d)p Fp(\))p 1510 2178 V 521 w(\(\))p 1842
2178 V 445 w Fl(exit)p Fp(\()p Fm(j)5 b Fp(\))p 2791
2178 V 513 w(\()p Fm(a;)15 b(b)p Fp(\))781 2266 y Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(c)p Fp(\))31 b(:=)f Fm(b)p 1510
2303 V 295 w Fp(\(\))p 1842 2303 V 445 w Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(i)p Fp(\))31 b(:=)g Fm(b)p 2791 2303 V 289
w Fp(\()p Fm(a;)15 b(b)p Fp(\))781 2391 y Fn(push)o Fp(\()p
Fm(b;)g Fl(stack)q Fp(\))p 1510 2429 V 229 w(\()p Fm(b)p
Fp(\))p 1842 2429 V 345 w Fl(exit)p Fp(\()p Fm(i)p Fp(\))p
2791 2429 V 585 w(\()p Fm(a;)g(b)p Fp(\))720 2516 y Fl(exit)p
Fp(\()p Fm(c)p Fp(\))p 1510 2554 V 590 w(\()p Fm(b)p
Fp(\))p 1842 2554 V 345 w Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(h)p Fp(\))32 b(:=)e Fm(b)p 2791 2554 V 329 w Fp(\()p
Fm(a;)15 b(b)p Fp(\))720 2642 y Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(b)p Fp(\))31 b(:=)g Fm(a)p 1510 2679 V 346 w Fp(\()p
Fm(b)p Fp(\))p 1842 2679 V 285 w Fl(exit)p Fp(\()p Fm(h)p
Fp(\))p 2791 2679 V 624 w(\()p Fm(a;)15 b(b)p Fp(\))720
2767 y Fn(push)o Fp(\()p Fm(a;)g Fl(stack)q Fp(\))p 1510
2805 V 281 w(\()p Fm(a;)g(b)p Fp(\))p 1842 2805 V 197
w(create)31 b Fm(C)2287 2781 y Fi(4)p 2791 2805 V 2843
2767 a Fp(\()p Fm(a;)15 b(b)p Fp(\))659 2892 y Fl(exit)q
Fp(\()p Fm(b)p Fp(\))p 1510 2930 V 650 w(\()p Fm(a;)g(b)p
Fp(\))p 1842 2930 V 197 w Fn(pop)o Fp(\()p Fl(stack)q
Fp(\))p 2791 2930 V 461 w(\()p Fm(b)p Fp(\))659 3018
y Fl(enter)q Fp(\()p Fm(f)10 b Fp(\))p 1510 3055 V 573
w(\()p Fm(a;)15 b(b)p Fp(\))p 1842 3055 V 197 w Fl(Comp)q
Fp(\()p Fm(a)p Fp(\))31 b(:=)f Fm(C)2527 3032 y Fi(4)p
2791 3055 V 2843 3018 a Fp(\()p Fm(b)p Fp(\))720 3143
y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(f)10 b Fp(\))31 b(:=)f
Fm(f)p 1510 3181 V 334 w Fp(\()p Fm(a;)15 b(b)p Fp(\))p
1842 3181 V 197 w Fn(pop)o Fp(\()p Fl(stack)q Fp(\))p
2791 3181 V 461 w(\(\))720 3268 y Fl(enter)p Fp(\()p
Fm(g)s Fp(\))p 1510 3306 V 522 w(\()p Fm(a;)g(b)p Fp(\))p
1842 3306 V 197 w Fl(Comp)q Fp(\()p Fm(b)p Fp(\))31 b(:=)f
Fm(C)2518 3282 y Fi(4)p 2791 3306 V 2843 3268 a Fp(\(\))781
3394 y Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(g)s Fp(\))31 b(:=)g
Fm(g)p 1510 3431 V 283 w Fp(\()p Fm(a;)15 b(b)p Fp(\))p
1842 3431 V 136 w Fl(exit)p Fp(\()p Fm(a)p Fp(\))p 2791
3431 V 689 w(\(\))345 3592 y Fq(Figure)38 b(3.7)p Fu(:)43
b(The)34 b(trace)f(of)f Fq(newscc)p Fn(2)g Fu(applied)f(to)h(the)h
(graph)g(of)f(Figure)f(3.2.)-116 3858 y Fj(Theorem)38
b(3.8.)c Fu(Algorithm)d Fq(newscc)p Fn(2)p Fu(,)j(presen)m(ted)i(in)d
(Figure)f(3.6)o(,)j(correctly)f(detects)h(\(the)f(ro)s(ots)f(of)7
b(\))-116 3992 y(the)33 b(strong)f(comp)s(onen)m(ts)h(of)g(the)g(input)
f(graph.)-116 4181 y Fj(Pro)s(of.)106 b Fu(Here)39 b(the)g(correct)h
(detection)e(of)h(a)f(comp)s(onen)m(t)h Fs(C)45 b Fu(with)39
b(ro)s(ot)e Fs(r)42 b Fu(means)d(that)f(when)i Fq(visit)p
Fn(2)-116 4314 y Fu(exits)31 b Fs(r)s Fu(,)g(the)g(con)m(ten)m(ts)i(of)
d(the)h(stac)m(k)h(is)f(the)g(same)g(as)g(it)f(w)m(as)h(when)h
Fs(r)i Fu(w)m(as)e(en)m(tered,)g(and)f Fr(Comp)o Fu(\()p
Fs(w)s Fu(\))c(=)h Fs(C)-116 4448 y Fu(for)43 b(eac)m(h)i(\014nal)e
(candidate)h(ro)s(ot)f(of)h Fs(C)7 b Fu(.)78 b(The)45
b(pro)s(of)e(resem)m(bles)i(the)f(correctness)i(pro)s(ofs)e(of)g(T)-8
b(arjan's)-116 4581 y(algorithm)35 b(and)j Fq(newscc)p
Fn(1)g Fu(ab)s(o)m(v)m(e.)61 b(W)-8 b(e)38 b(can)h(sho)m(w,)i(as)d(in)f
(the)i(pro)s(of)e(of)h(Theorem)h(3.3,)g(that)f(giv)m(en)g(a)-116
4715 y(comp)s(onen)m(t)31 b Fs(C)39 b Fu(with)31 b(ro)s(ot)f
Fs(r)s Fu(:)43 b Fj(\(a\))31 b Fu(for)g(eac)m(h)h(v)m(ertex)h
Fs(x)f Fu(in)f Fs(C)7 b Fu(,)31 b Fr(Fcr)p Fu(\()p Fs(x)p
Fu(\))h(is)f(in)f Fs(C)7 b Fu(,)32 b Fj(\(b\))f Fr(Fcr)o
Fu(\()p Fs(r)s Fu(\))c(=)h Fs(r)s Fu(,)j(and)h Fj(\(c\))-116
4849 y Fr(Fcr)o Fu(\()p Fs(x)p Fu(\))k Fs(<)276 4864
y Fe(\034)354 4849 y Fs(x)h Fu(for)g(eac)m(h)h(nonro)s(ot)e(v)m(ertex)j
Fs(x)e Fu(of)g Fs(C)7 b Fu(.)56 b(The)38 b(only)f(di\013erence)g(is)g
(in)f(sho)m(wing)h(ho)m(w)i Fj(\(b\))e Fu(and)-116 4982
y Fj(\(c\))31 b Fu(imply)h Fj(\(d\))p Fu(,)g(the)h(correct)h(detection)
e(of)g(comp)s(onen)m(t)h Fs(C)7 b Fu(.)-137 5190 y Fj(\(d\))85
b Fu(Let)31 b Fs(C)37 b Fu(b)s(e)30 b(a)g(comp)s(onen)m(t)h(with)e(ro)s
(ot)h Fs(r)s Fu(.)42 b(Similarly)26 b(to)k(Lemma)f(3.1)h(w)m(e)h(can)g
(sho)m(w)g(that)f(all)f(v)m(ertices)98 5323 y(of)40 b
Fs(C)47 b Fu(are)40 b(visited)g(during)f(the)i(execution)f(of)g
Fq(visit)p Fn(2)p Fu(\()p Fs(r)s Fu(\).)66 b(By)41 b
Fj(\(c\))p Fu(,)g(the)g(condition)e Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(v)t Fu(\))40 b(=)g Fs(v)98 5457 y Fu(fails)33
b(for)i(eac)m(h)h(nonro)s(ot)e(v)m(ertex)j Fs(v)i Fu(at)34
b(line)g(8)h(in)f Fq(visit)p Fn(2)p Fu(\()p Fs(v)t Fu(\).)51
b(Hence)36 b(the)g(\014nal)e(candidate)h(ro)s(ots)f(of)98
5591 y(all)28 b(nonro)s(ot)h(v)m(ertices)j(are)e(inserted)g(once)h(on)m
(to)f(the)g(stac)m(k)i(at)d(line)g(16.)42 b(If)30 b Fs(C)37
b Fu(is)30 b(at)f(lev)m(el)h Fs(l)g(>)e Fu(0,)i(eac)m(h)98
5724 y(comp)s(onen)m(t)c(other)h(than)f Fs(C)33 b Fu(visited)25
b(during)h(the)g(execution)h(of)f Fq(visit)p Fn(2)p Fu(\()p
Fs(r)s Fu(\))f(is)h(at)f(a)h(lev)m(el)g(b)s(elo)m(w)g
Fs(l)r Fu(.)41 b(By)98 5858 y(the)36 b(induction)e(h)m(yp)s(othesis,)j
(these)g(comp)s(onen)m(ts)e(are)g(correctly)h(detected.)53
b(If)35 b Fs(C)42 b Fu(is)35 b(at)g(lev)m(el)f(zero,)p
eop
47 12 bop 3778 -294 a Fu(47)98 18 y(no)35 b(other)h(comp)s(onen)m(t)f
(is)g(visited)g(during)g(the)g(execution)h(of)f Fq(visit)p
Fn(2)p Fu(\()p Fs(r)s Fu(\).)51 b(Th)m(us,)38 b(the)e(detection)f(of)98
152 y(other)k(comp)s(onen)m(ts)g(during)f Fq(visit)p
Fn(2)p Fu(\()p Fs(r)s Fu(\))g(do)s(es)i(not)e(remo)m(v)m(e)i(v)m
(ertices)f(of)g Fs(C)45 b Fu(from)38 b(the)h(stac)m(k.)63
b(The)98 286 y(v)m(ertices)28 b(of)f Fs(C)34 b Fu(that)26
b(are)h(inserted)h(on)m(to)f(the)g(stac)m(k)h(remain)e(there)i(un)m
(til)d(the)j(condition)d Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t
Fu(\))28 b(=)f Fs(v)98 419 y Fu(is)35 b(satis\014ed)h(for)e(some)h(v)m
(ertex)i Fs(v)i Fu(of)c Fs(C)42 b Fu(at)35 b(line)f(8)h(in)g
Fq(visit)p Fn(2)p Fu(\()p Fs(v)t Fu(\).)51 b(By)37 b
Fj(\(b\))d Fu(and)i Fj(\(c\))p Fu(,)f(the)g(condition)98
553 y(is)40 b(satis\014ed)h(only)f(for)h(the)g(ro)s(ot)e
Fs(r)s Fu(.)67 b(If)41 b Fs(C)47 b Fu(is)41 b(a)f(trivial)e(comp)s
(onen)m(t,)k(i.e.,)h Fs(C)48 b Fu(=)41 b Fh(f)p Fs(r)s
Fh(g)p Fu(,)h Fs(r)h Fu(is)d(not)h(on)98 686 y(the)g(stac)m(k)h(and)f
(all)e(v)m(ertices)i(on)g(the)g(stac)m(k)h(m)m(ust)f(b)s(e)g(smaller)d
(than)j Fs(r)s Fu(.)67 b(Hence)42 b(the)g(test)f(at)f(line)98
820 y(10)e(fails.)59 b(Assigning)37 b Fs(C)45 b Fu(to)38
b Fr(Comp)o Fu(\()p Fs(r)s Fu(\))g(at)g(line)f(15)g(implies)f(the)j
(correct)g(detection)f(of)g Fs(C)7 b Fu(.)60 b(If)38
b Fs(C)45 b Fu(is)98 954 y(non)m(trivial,)34 b(at)h(least)g(one)h(v)m
(ertex)h(of)e Fs(C)42 b Fu(is)35 b(on)g(the)h(stac)m(k.)53
b(Since)36 b(all)d(other)j(comp)s(onen)m(ts)g(that)f(are)98
1087 y(pro)s(cessed)h(during)e Fq(visit)p Fn(2)p Fu(\()p
Fs(r)s Fu(\))g(are)g(correctly)g(detected,)j(the)d(v)m(ertices)i(of)e
Fs(C)41 b Fu(on)34 b(the)h(stac)m(k)g(are)f(the)98 1221
y(topmost)k(v)m(ertices.)63 b(The)39 b(test)h(at)e(line)f(10)h
(succeeds,)43 b(and)c(eac)m(h)g(v)m(ertex)i Fs(w)f Fu(of)f
Fs(C)45 b Fu(on)38 b(the)h(stac)m(k)h(is)98 1355 y(remo)m(v)m(ed)d
(from)e(the)h(stac)m(k)i(at)d(lines)g(11{14,)h(and)g
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))f(is)h(set)h(to)e Fs(C)7
b Fu(.)54 b(When)37 b Fq(visit)p Fn(2)f Fu(exits)g Fs(r)s
Fu(,)98 1488 y(the)e(con)m(ten)m(ts)i(of)d(the)h(stac)m(k)h(is)f(the)g
(same)f(as)h(it)f(w)m(as)i(when)g Fs(r)h Fu(w)m(as)f(en)m(tered.)48
b(Th)m(us,)36 b Fs(C)k Fu(is)34 b(correctly)98 1622 y(detected.)p
526 1622 4 67 v 530 1559 59 4 v 530 1622 V 588 1622 4
67 v -116 1838 a Fj(Theorem)j(3.9.)c Fu(Algorithm)d Fq(newscc)p
Fn(2)i Fu(runs)i(in)e(\002\()p Fs(n)22 b Fu(+)g Fs(e)p
Fu(\))33 b(time,)f(where)i Fs(n)e Fu(and)h Fs(e)g Fu(are)g(the)g(n)m
(um)m(b)s(er)g(of)-116 1972 y(v)m(ertices)h(and)e(the)h(n)m(um)m(b)s
(er)g(of)f(edges)i(in)e(the)h(input)f(graph,)g(resp)s(ectiv)m(ely)-8
b(.)-116 2189 y Fj(Pro)s(of.)86 b Fu(The)34 b(pro)s(of)f(is)h(similar)c
(to)k(the)g(pro)s(of)f(of)g(Theorem)h(3.4.)47 b(W)-8
b(e)34 b(can)g(c)m(hec)m(k)j(if)32 b(a)i(v)m(ertex)h(is)f(on)f(the)-116
2322 y(stac)m(k)41 b(in)e(constan)m(t)i(time)d(if)h(w)m(e)i(k)m(eep)g
(this)f(information)c(in)j(a)h(Bo)s(olean)e(v)m(ector)j(or)f(other)g
(appropriate)-116 2456 y(data)32 b(structure.)p 562 2456
V 566 2393 59 4 v 566 2456 V 623 2456 4 67 v 30 2673
a(W)-8 b(e)40 b(conjecture)g(that)f(the)g(second)i(tra)m(v)m(ersal)e
(cannot)h(b)s(e)f(completely)f(remo)m(v)m(ed,)k(at)d(least)f(without)
-116 2806 y(c)m(hanging)f(the)i(\014rst)g(tra)m(v)m(ersal.)60
b(If)38 b(w)m(e)h(remo)m(v)m(e)g(the)f(second)i(tra)m(v)m(ersal,)g(w)m
(e)f(can)f(access)i(only)d(the)i(com-)-116 2940 y(p)s(onen)m(t)34
b(ro)s(ot)e Fs(r)k Fu(when)e(w)m(e)g(detect)h(a)e(new)h(comp)s(onen)m
(t.)45 b(Th)m(us,)35 b(only)e(the)h(v)-5 b(ariable)31
b Fr(Comp)o Fu(\()p Fs(r)s Fu(\))i(can)h(b)s(e)f(set)-116
3074 y(to)f Fs(C)7 b Fu(.)45 b(After)33 b(a)g(nonro)s(ot)f(v)m(ertex)j
Fs(w)g Fu(has)f(b)s(een)g(pro)s(cessed,)h(w)m(e)f(do)f(not)f
(necessarily)i(ha)m(v)m(e)g(a)f(\014xed)h(length)-116
3207 y(access)28 b(path)e(from)f Fs(w)j Fu(to)e(the)g(ro)s(ot)g(of)f
(the)i(comp)s(onen)m(t)f(con)m(taining)f Fs(w)s Fu(.)40
b(Th)m(us,)29 b(testing)d(if)f Fs(w)k Fu(b)s(elongs)c(to)h(an)-116
3341 y(already)32 b(detected)i(comp)s(onen)m(t)f(cannot)f(b)s(e)h(done)
g(in)f(constan)m(t)i(time,)d(whic)m(h)i(slo)m(ws)g(the)g(\014rst)g(tra)
m(v)m(ersal.)30 3474 y(W)-8 b(e)47 b(analyze)g(no)m(w)h(ho)m(w)g(the)f
(n)m(um)m(b)s(er)g(of)g(v)m(ertices)h(stored)f(on)m(to)g(the)h(stac)m
(k)g(di\013ers)f(in)f(the)h(three)-116 3608 y(algorithms.)57
b(Let)38 b Fs(P)664 3623 y Fe(T)719 3608 y Fu(,)h Fs(P)848
3623 y Fi(1)887 3608 y Fu(,)h(and)e Fs(P)1212 3623 y
Fi(2)1289 3608 y Fu(b)s(e)g(the)h(n)m(um)m(b)s(er)f(of)f(v)m(ertices)j
(stored)e(on)m(to)g(the)g(stac)m(k)i(b)m(y)f(T)-8 b(arjan's)-116
3742 y(algorithm)32 b(and)k(b)m(y)h(algorithms)c Fq(newscc)p
Fn(1)i Fu(and)h Fq(newscc)p Fn(2)p Fu(,)g(resp)s(ectiv)m(ely)-8
b(,)38 b(when)f(applied)d(to)i(a)f(graph)-116 3875 y
Fs(G)p Fu(.)51 b(T)-8 b(arjan's)36 b(algorithm)c(stores)k(all)d
Fs(n)j Fu(v)m(ertices)g(on)m(to)g(the)f(stac)m(k.)53
b(Th)m(us,)38 b Fs(P)2766 3890 y Fe(T)2853 3875 y Fu(=)32
b Fs(n)p Fu(.)52 b Fq(newscc)p Fn(1)35 b Fu(stores)h(a)-116
4009 y(v)m(ertex)e(on)m(to)f(the)h(stac)m(k)g(unless)f(it)f(is)g(a)h
(comp)s(onen)m(t)g(ro)s(ot.)43 b(Th)m(us,)35 b Fs(P)2468
4024 y Fi(1)2536 4009 y Fu(=)28 b Fs(n)22 b Fh(\000)h
Fs(s)p Fu(,)33 b(where)h Fs(s)f Fu(is)f(the)h(n)m(um)m(b)s(er)-116
4143 y(of)g(strong)g(comp)s(onen)m(ts)h(in)e(the)i(input)f(graph.)45
b(Let)33 b Fs(p)p Fu(\()p Fs(C)7 b Fu(\))33 b(b)s(e)h(the)f(n)m(um)m(b)
s(er)h(of)f(v)m(ertices)h(stored)g(on)m(to)f(the)-116
4276 y(stac)m(k)e(b)m(y)f Fq(newscc)p Fn(2)f Fu(when)i(pro)s(cessing)f
(a)f(comp)s(onen)m(t)h Fs(C)7 b Fu(.)43 b(If)29 b Fs(C)37
b Fu(is)29 b(trivial,)f(no)h(v)m(ertices)i(are)f(stored)g(on)m(to)-116
4410 y(the)35 b(stac)m(k.)52 b(If)35 b Fs(C)42 b Fu(is)34
b(non)m(trivial,)g(at)g(least)h(one)g(v)m(ertex)i(is)d(not)h(a)g
(\014nal)f(candidate)h(ro)s(ot)f(v)m(ertex)j(and)e(th)m(us)-116
4543 y(not)k(stored)h(on)m(to)f(the)h(stac)m(k.)65 b(Th)m(us,)42
b(0)d Fh(\024)79 b Fs(p)p Fu(\()p Fs(C)7 b Fu(\))39 b
Fh(\024)h(j)p Fs(C)7 b Fh(j)26 b(\000)h Fu(1,)41 b(where)f
Fh(j)p Fs(C)7 b Fh(j)39 b Fu(is)f(the)i(n)m(um)m(b)s(er)g(of)f(v)m
(ertices)-116 4677 y(in)c(comp)s(onen)m(t)i Fs(C)7 b
Fu(.)54 b Fs(P)725 4692 y Fi(2)798 4677 y Fu(=)908 4611
y Fd(P)996 4698 y Fe(C)5 b Ff(2)p Fi(\005)1172 4677 y
Fs(p)p Fu(\()p Fs(C)i Fu(\))o(,)38 b(where)f(\005)f(is)g(the)h(set)g
(of)f(all)e(strong)i(comp)s(onen)m(ts)h(in)f(the)g(input)-116
4811 y(graph.)68 b(Using)41 b(the)h(inequalit)m(y)d(for)i
Fs(p)p Fu(\()p Fs(C)7 b Fu(\),)43 b(w)m(e)f(get)f(0)h
Fh(\024)g Fs(P)2169 4826 y Fi(2)2251 4811 y Fh(\024)g
Fs(n)28 b Fh(\000)h Fs(s)42 b Fu(=)g Fs(P)2831 4826 y
Fi(1)2912 4811 y Fs(<)g(P)3093 4826 y Fe(T)3148 4811
y Fu(.)69 b(Th)m(us,)45 b(T)-8 b(arjan's)-116 4944 y(algorithm)31
b(alw)m(a)m(ys)k(stores)g(more)f(v)m(ertices)h(on)m(to)g(the)f(stac)m
(k)i(than)e Fq(newscc)p Fn(1)p Fu(,)h(and)f Fq(newscc)p
Fn(2)g Fu(stores)h(at)-116 5078 y(most)d(as)h(man)m(y)f(v)m(ertices)i
(on)m(to)e(the)h(stac)m(k)h(as)f Fq(newscc)p Fn(1)p Fu(.)p
eop
48 13 bop -116 -294 a Fu(48)-116 18 y Ft(3.2)160 b(Adapting)83
b(T)-13 b(arjan's)83 b(algorithm)g(to)g(transitiv)l(e)g(closure)251
221 y(computation)-116 453 y Fu(Tw)m(o)32 b(main)e(strategies)i(exist)f
(for)g(emplo)m(ying)f(strong)i(comp)s(onen)m(t)f(detection)h(in)f
(computing)f(the)i(transi-)-116 587 y(tiv)m(e)f(closure.)43
b(The)32 b(\014rst)f(is)g(the)g(strategy)g(used)i(in)d(Purdom's)h
(algorithm)d([101)o(],)j(whic)m(h)h(w)m(e)g(describ)s(ed)g(in)-116
721 y(section)j(2.3.2.)52 b(In)36 b(this)g(strategy)-8
b(,)36 b(the)g(strong)g(comp)s(onen)m(ts)g(are)g(detected)h(and)f(the)g
(transitiv)m(e)f(closure)-116 854 y(is)c(computed)g(for)g(the)h
(condensation)f(graph)g(induced)h(b)m(y)g(the)g(comp)s(onen)m(ts.)44
b(The)32 b(transitiv)m(e)f(closure)g(of)-116 988 y(the)k(condensation)h
(graph)e(is)h(then)h(con)m(v)m(erted)h(to)d(the)i(transitiv)m(e)e
(closure)i(of)e(the)i(original)31 b(graph.)51 b(The)-116
1122 y(w)m(eakness)45 b(in)c(this)h(strategy)h(is)e(that)h(it)f
(requires)i(sev)m(eral)g(passes)h(o)m(v)m(er)f(the)f(graph.)72
b(This)43 b(mak)m(es)f(the)-116 1255 y(constan)m(t)33
b(costs)h(high.)30 1389 y(The)26 b(second)h(strategy)f(is)e(based)j(on)
e(a)g(more)f(direct)h(adaptation)f(of)h(T)-8 b(arjan's)25
b(algorithm)d(to)j(transitiv)m(e)-116 1522 y(closure)37
b(computation.)57 b(The)38 b(transitiv)m(e)f(closure)h(is)f(computed)g
(during)g(a)g(single)g(pass)h(o)m(v)m(er)g(the)g(input)-116
1656 y(graph)43 b(b)m(y)h(in)m(terlea)m(ving)e(the)i(detection)g(of)f
(the)h(strong)f(comp)s(onen)m(ts)h(with)f(the)h(computation)e(of)g(the)
-116 1790 y(successor)k(sets.)78 b(The)44 b(problem)f(with)g(this)h
(strategy)g(is)f(that)g(w)m(e)i(do)f(not)f(ha)m(v)m(e)i(all)d(the)i
(information)-116 1923 y(ab)s(out)h(the)i(structure)g(of)e(the)h(graph)
g(when)h(w)m(e)g(are)f(tra)m(v)m(ersing)h(it.)82 b(This)46
b(ma)m(y)g(lead)f(to)h(redundan)m(t)-116 2057 y(op)s(erations)32
b(in)f(the)i(successor)i(set)f(computation.)30 2190 y(W)-8
b(e)41 b(b)s(egin)e(our)h(study)h(using)f(the)h(second)g(strategy)-8
b(.)67 b(W)-8 b(e)40 b(in)m(tro)s(duce)h(a)e(simple)g(transitiv)m(e)h
(closure)-116 2324 y(algorithm,)30 b(originally)g(presen)m(ted)36
b(in)c([114],)i(analyze)f(its)g(b)s(eha)m(vior)g(and)h(p)s(oin)m(t)e
(out)i(its)f(w)m(eaknesses.)50 b(In)-116 2458 y(the)29
b(next)g(subsections,)i(w)m(e)e(presen)m(t)h(new)f(transitiv)m(e)f
(closure)h(algorithms)c(that)k(o)m(v)m(ercome)g(the)g(problems)-116
2591 y(in)40 b(the)h(simple)e(algorithm)f(and)i(in)g(other)h(transitiv)
m(e)f(closure)h(algorithms)d(that)j(are)g(based)g(on)g(strong)-116
2725 y(comp)s(onen)m(t)32 b(detection.)30 2859 y(The)d(simple)e
(transitiv)m(e)h(closure)h(algorithm,)d(called)h Fq(simple)p
2338 2859 34 4 v 40 w(tc)h Fu(and)g(presen)m(ted)j(in)d(Figure)j(3.8,)e
(is)f(a)-116 2992 y(straigh)m(tforw)m(ard)h(mo)s(di\014cation)f(of)h(T)
-8 b(arjan's)31 b(algorithm.)39 b(Note)31 b(that)f(w)m(e)h(could)e
(equally)h(w)m(ell)f(ha)m(v)m(e)j(used)-116 3126 y Fq(newscc)p
Fn(1)26 b Fu(as)i(a)f(basis)g(for)g(the)g(algorithm.)39
b(F)-8 b(or)26 b(transitiv)m(e)h(closure)g(computation,)g(w)m(e)h(ha)m
(v)m(e)h(added)f(lines)-116 3259 y(5,)k(9,)h(and)f(17)g(to)h(T)-8
b(arjan's)32 b(algorithm.)30 3393 y(T)-8 b(o)25 b(compute)f(the)h
(transitiv)m(e)g(closure,)h(w)m(e)g(de\014ne)f(a)g(v)-5
b(ariable)23 b Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\))25
b(for)f(eac)m(h)h(v)m(ertex)i Fs(v)t Fu(.)40 b(It)25
b(con)m(tains)-116 3527 y(the)35 b(\(partially)d(computed\))j
(successor)i(set)e(of)g(v)m(ertex)h Fs(v)t Fu(.)50 b(Initially)32
b(\(at)i(line)f(5\),)i Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t
Fu(\))35 b(con)m(tains)f(only)-116 3660 y(the)41 b(v)m(ertices)h
(adjacen)m(t)f(from)f Fs(v)t Fu(.)67 b(A)m(t)41 b(line)e(9,)k(the)e
(successors)j(of)c(a)g(c)m(hild)g(v)m(ertex)j Fs(w)g
Fu(computed)d(so)h(far)-116 3794 y(are)32 b(inserted)i(in)m(to)d
Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t Fu(\).)43 b(When)34 b(a)e(strong)h(comp)
s(onen)m(t)g(is)f(detected,)i(the)f(successor)i(set)f(of)e(the)h(ro)s
(ot)-116 3928 y(v)m(ertex)f(is)f(correctly)f(computed.)44
b(Other)31 b(v)m(ertices)g(of)g(the)g(comp)s(onen)m(t)g(ma)m(y)f(ha)m
(v)m(e)i(incomplete)d(successor)-116 4061 y(sets.)50
b(A)m(t)35 b(line)f(17,)g(the)h(successor)i(set)e(of)g(the)g(comp)s
(onen)m(t)f(ro)s(ot)g(is)g(distributed)g(to)g(the)h(other)g(mem)m(b)s
(ers)-116 4195 y(of)d(the)h(comp)s(onen)m(t.)-116 4393
y Fj(Example)g(3.4.)72 b Fu(In)30 b(Figure)h(3.9\(a\),)f(w)m(e)g
(presen)m(t)i(again)c(graph)h Fs(G)g Fu(and)h(in)f(Figure)i(3.9\(b\))f
(the)f(successor)-116 4526 y(sets)f(of)e(the)i(v)m(ertices)g(of)f
Fs(G)p Fu(.)41 b(As)28 b(w)m(e)g(see,)h(the)e(v)m(ertices)i(of)d(a)h
(strong)g(comp)s(onen)m(t)g(ha)m(v)m(e)h(the)g(same)e(successor)-116
4660 y(set.)41 b(Examine)24 b(what)h(happ)s(ens)h(when)f(w)m(e)h(apply)
e Fq(simple)p 2041 4660 V 39 w(tc)g Fu(on)h(graph)f Fs(G)p
Fu(.)41 b(Assume)25 b(that)f(the)h(execution)-116 4794
y(starts)j(at)g(v)m(ertex)h Fs(a)f Fu(and)g(that)g(the)g(v)m(ertices)i
(adjacen)m(t)e(from)f(a)g(v)m(ertex)j Fs(v)i Fu(are)27
b(pro)s(cessed)j(in)d(the)i(adjacency)-116 4927 y(list)c(order,)j
(presen)m(ted)h(in)d(Figure)31 b(3.10\(a\))o(.)42 b(Eac)m(h)27
b(v)m(ertex)h(except)h Fs(j)j Fu(gets)27 b(a)f(non-empt)m(y)h(partial)d
(successor)-116 5061 y(set.)46 b(W)-8 b(e)34 b(presen)m(t)h(these)f
(sets)h(in)d(Figure)g(3.10\(b\))o(.)46 b(The)34 b(total)e(size)i(of)e
(the)i(partial)d(successor)36 b(sets)e(is)f(62.)-116
5195 y(W)-8 b(e)29 b(need)h(17)f(union)f(op)s(erations)g(for)h
(computing)e(the)j(successor)h(sets,)g(one)e(p)s(er)g(eac)m(h)h(edge)g
(of)f(the)g(graph.)-116 5328 y(If)42 b(the)h(graph)f(is)g(tra)m(v)m
(ersed)i(in)e(some)g(other)h(order,)i(the)e(size)f(of)g(the)h(partial)d
(successor)45 b(sets)e(ma)m(y)g(b)s(e)-116 5462 y(sligh)m(tly)31
b(di\013eren)m(t.)p 692 5462 4 67 v 696 5399 59 4 v 696
5462 V 753 5462 4 67 v -116 5724 a Fj(Theorem)36 b(3.10.)d
Fu(Algorithm)c Fq(simple)p 1409 5724 34 4 v 39 w(tc)p
Fu(,)j(presen)m(ted)j(in)c(Figure)h(3.8)o(,)h(correctly)f(computes)h
(the)g(tran-)-116 5858 y(sitiv)m(e)f(closure)h(of)f(the)h(input)f
(graph)g Fs(G)p Fu(.)p eop
49 14 bop 3778 -294 a Fu(49)-116 6 y Fp(\(1\))218 b Fo(pro)s(cedure)31
b Fn(simple)p 997 6 31 4 v 35 w(tc)p Fp(\()p Fm(v)s Fp(\);)-116
132 y(\(2\))218 b Fo(b)s(egin)-116 257 y Fp(\(3\))385
b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))31 b(:=)61
b Fm(v)s Fp(;)31 b Fl(Comp)q Fp(\()p Fm(v)s Fp(\))g(:=)61
b Fl(Nil)p Fp(;)-116 382 y(\(4\))385 b Fn(push)o Fp(\()p
Fm(v)s(;)15 b Fl(stack)q Fp(\);)-116 508 y(\(5\))385
b Fl(Suc)-5 b(c)p Fp(\()p Fm(v)s Fp(\))31 b(:=)f Fk(f)p
Fm(w)e Fk(j)e Fp(\()p Fm(v)s(;)15 b(w)r Fp(\))27 b Fk(2)e
Fm(E)5 b Fk(g)p Fp(;)-116 633 y(\(6\))385 b Fo(for)30
b(eac)m(h)h Fp(v)m(ertex)h Fm(w)g Fp(suc)m(h)e(that)h(\()p
Fm(v)s(;)15 b(w)r Fp(\))28 b Fk(2)c Fm(E)36 b Fo(do)31
b(b)s(egin)-116 758 y Fp(\(7\))551 b Fo(if)31 b Fm(w)i
Fp(is)c(not)i(already)f(visited)e Fo(then)i Fn(simple)p
2131 758 V 36 w(tc)o Fp(\()p Fm(w)r Fp(\);)-116 884 y(\(8\))551
b Fo(if)31 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))c(=)d Fl(Nil)30
b Fo(then)h Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))31
b(:=)61 b Fn(min)p Fp(\()p Fl(R)-5 b(o)g(ot)r Fp(\()p
Fm(v)s Fp(\))p Fm(;)15 b Fl(R)-5 b(o)g(ot)t Fp(\()p Fm(w)r
Fp(\)\))-116 1009 y(\(9\))551 b Fl(Suc)-5 b(c)p Fp(\()p
Fm(v)s Fp(\))32 b(:=)e Fl(Suc)-5 b(c)p Fp(\()p Fm(v)s
Fp(\))21 b Fk([)f Fl(Suc)-5 b(c)p Fp(\()p Fm(w)r Fp(\);)-116
1134 y(\(10\))340 b Fo(end)p Fp(;)-116 1260 y(\(11\))g
Fo(if)30 b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))26
b(=)f Fm(v)34 b Fo(then)c(b)s(egin)-116 1385 y Fp(\(12\))506
b(create)32 b(a)f(new)f(comp)s(onen)m(t)h Fm(C)7 b Fp(;)-116
1510 y(\(13\))506 b Fo(rep)s(eat)-116 1636 y Fp(\(14\))673
b Fm(w)33 b Fp(:=)61 b Fn(pop)o Fp(\()p Fl(stack)q Fp(\);)-116
1761 y(\(15\))673 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))32
b(:=)61 b Fm(C)7 b Fp(;)-116 1886 y(\(16\))673 b(insert)29
b Fm(w)k Fp(in)m(to)e(comp)s(onen)m(t)f Fm(C)7 b Fp(;)-116
2012 y(\(17\))673 b Fl(Suc)-5 b(c)p Fp(\()p Fm(w)r Fp(\))32
b(:=)e Fl(Suc)-5 b(c)p Fp(\()p Fm(v)s Fp(\);)122 b(/*)31
b(P)m(oin)m(ter)g(assignmen)m(t,)g(not)f(a)h(cop)m(y)g(*/)-116
2137 y(\(18\))506 b Fo(un)m(til)31 b Fm(w)d Fp(=)c Fm(v)-116
2262 y Fp(\(19\))340 b Fo(end)-116 2388 y Fp(\(20\))173
b Fo(end)p Fp(;)-116 2513 y(\(21\))g Fo(b)s(egin)31 b
Fp(/*)g(Main)f(program)g(*/)-116 2638 y(\(22\))340 b
Fl(stack)61 b Fp(:=)f Fk(;)p Fp(;)-116 2764 y(\(23\))340
b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h Fm(v)c Fk(2)d
Fm(V)51 b Fo(do)-116 2889 y Fp(\(24\))506 b Fo(if)31
b Fm(v)i Fp(is)d(not)g(already)g(visited)f Fo(then)h
Fn(simple)p 2111 2889 V 36 w(tc)o Fp(\()p Fm(v)s Fp(\))-116
3014 y(\(25\))173 b Fo(end)p Fp(.)-116 3196 y Fq(Figure)37
b(3.8)p Fu(:)43 b(Algorithm)30 b Fq(simple)p 1264 3196
34 4 v 39 w(tc)p Fu(:)43 b(T)-8 b(arjan's)33 b(algorithm)d(adapted)j
(to)f(transitiv)m(e)g(closure)h(compu-)-116 3304 y(tation.)-116
3589 y Fj(Pro)s(of.)79 b Fu(The)33 b(strong)f(comp)s(onen)m(ts)g(are)g
(detected)h(as)f(in)f(T)-8 b(arjan's)32 b(algorithm.)40
b(W)-8 b(e)32 b(only)f(ha)m(v)m(e)i(to)f(sho)m(w)-116
3722 y(that)j(the)g(successor)j(sets)e(are)f(correctly)g(computed.)52
b(Let)35 b Fs(C)42 b Fu(b)s(e)35 b(a)g(strong)g(comp)s(onen)m(t)g(and)g
Fs(r)j Fu(its)d(ro)s(ot.)-116 3856 y(Since)d Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\))32 b(is)g(distributed)f(to)h(the)h(other)f
(mem)m(b)s(ers)h(of)e Fs(C)40 b Fu(at)31 b(line)g(17,)h(w)m(e)i(ha)m(v)
m(e)f(to)f(sho)m(w)i(that)e(when)-116 3990 y(all)37 b(edges)j(lea)m
(ving)d Fs(r)42 b Fu(are)d(pro)s(cessed,)j Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\))38 b(con)m(tains)h(a)g(v)m(ertex)i
Fs(v)h Fu(i\013)c Fs(G)h Fu(con)m(tains)g(a)f(non-n)m(ull)g(path)-116
4123 y Fs(r)-47 4070 y Fi(+)-69 4123 y Fh(!)o Fs(v)t
Fu(.)74 b(The)43 b(only-if)e(part)h(is)h(ob)m(vious,)i(since)e
Fq(simple)p 1997 4123 V 39 w(tc)g Fu(adds)g(new)h(successors)h(to)e(a)f
(successor)j(set)-116 4257 y Fr(Suc)-5 b(c)p Fu(\()p
Fs(v)t Fu(\))35 b(only)g(b)m(y)i(emplo)m(ying)d(edges)j(lea)m(ving)e
Fs(v)t Fu(.)53 b(W)-8 b(e)36 b(sho)m(w)h(the)f(if)f(part)g(b)m(y)i
(induction)e(on)h(the)g(lev)m(el)f(of)-116 4391 y(comp)s(onen)m(t)d
Fs(C)7 b Fu(.)-106 4655 y Fj(\(i\))84 b Fu(Let)29 b Fs(C)35
b Fu(=)27 b Fh(f)p Fs(r)s Fh(g)h Fu(b)s(e)h(a)g(trivial)d(comp)s(onen)m
(t)j(at)f(lev)m(el)g(zero.)43 b(A)m(t)29 b(line)e(5)i(in)f
Fq(simple)p 3041 4655 V 39 w(tc)p Fu(\()p Fs(r)s Fu(\),)h
Fs(r)i Fu(is)d(inserted)98 4789 y(in)m(to)39 b Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\))40 b(if)e Fs(G)i Fu(has)g(an)g(edge)h(\()p
Fs(r)m(;)17 b(r)s Fu(\).)65 b(Th)m(us,)43 b Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\))39 b(is)g(correctly)h(computed.)66
b(Let)40 b Fs(C)47 b Fu(b)s(e)40 b(a)98 4922 y(non)m(trivial)21
b(comp)s(onen)m(t)h(at)h(lev)m(el)f(zero)h(and)g Fs(v)j
Fu(a)c(v)m(ertex)j(of)d Fs(C)7 b Fu(.)40 b(Since)23 b
Fs(C)29 b Fu(is)23 b(non)m(trivial,)f(it)g(has)h(a)f(v)m(ertex)98
5056 y Fs(u)h Fu(suc)m(h)i(that)f Fs(G)f Fu(con)m(tains)h(edge)g(\()p
Fs(u;)17 b(v)t Fu(\).)39 b(Th)m(us,)27 b(eac)m(h)e(v)m(ertex)g
Fs(v)j Fu(of)23 b Fs(C)30 b Fu(is)23 b(inserted)i(in)m(to)d(the)i(set)h
Fr(Suc)-5 b(c)p Fu(\()p Fs(u)p Fu(\))98 5190 y(of)24
b(some)h(v)m(ertex)h Fs(u)e Fu(in)g Fs(C)31 b Fu(at)24
b(line)g(5)g(in)g Fq(simple)p 1799 5190 V 39 w(tc)o Fu(\()p
Fs(u)p Fu(\).)40 b(W)-8 b(e)25 b(sho)m(w)h(that)e(the)h(elemen)m(ts)g
(of)f Fr(Suc)-5 b(c)p Fu(\()p Fs(u)p Fu(\))24 b(are)98
5323 y(added)29 b(in)m(to)d Fr(Suc)-5 b(c)p Fu(\()p Fs(r)s
Fu(\).)42 b(F)-8 b(or)26 b(eac)m(h)j(v)m(ertex)g Fs(u)f
Fh(6)p Fu(=)f Fs(r)j Fu(in)d Fs(C)7 b Fu(,)29 b(the)f(depth-\014rst)h
(spanning)e(forest)h Fs(F)41 b Fu(induced)98 5457 y(on)29
b(the)g(execution)g(of)f Fq(simple)p 1253 5457 V 39 w(tc)h
Fu(con)m(tains)f(a)h(non-n)m(ull)e(path)h Fs(p)g Fu(=)f(\()p
Fs(v)2754 5472 y Fi(0)2794 5457 y Fs(;)17 b(v)2885 5472
y Fi(1)2924 5457 y Fu(\))p Fs(;)g(:)g(:)g(:)f(;)h Fu(\()p
Fs(v)3266 5472 y Fe(k)r Ff(\000)p Fi(1)3399 5457 y Fs(;)g(v)3490
5472 y Fe(k)3532 5457 y Fu(\),)30 b(where)98 5591 y Fs(v)145
5606 y Fi(0)225 5591 y Fu(=)40 b Fs(r)i Fu(and)e Fs(v)671
5606 y Fe(k)754 5591 y Fu(=)g Fs(u)p Fu(.)64 b(Th)m(us,)44
b(the)c(execution)g(of)g Fq(simple)p 2358 5591 V 39 w(tc)p
Fu(\()p Fs(v)2593 5606 y Fe(i)p Ff(\000)p Fi(1)2711 5591
y Fu(\))g(con)m(tains)g(the)g(execution)g(of)98 5724
y Fq(simple)p 418 5724 V 39 w(tc)p Fu(\()p Fs(v)653 5739
y Fe(i)681 5724 y Fu(\))33 b(for)g(1)28 b Fh(\024)g Fs(i)h
Fh(\024)g Fs(k)s Fu(.)44 b(When)34 b Fq(visit)f Fu(returns)h(from)d(v)m
(ertex)k Fs(v)2831 5739 y Fe(i)2892 5724 y Fu(to)e(v)m(ertex)h
Fs(v)3354 5739 y Fe(i)p Ff(\000)p Fi(1)3473 5724 y Fu(,)f
Fr(Suc)-5 b(c)p Fu(\()p Fs(v)3810 5739 y Fe(i)3838 5724
y Fu(\))98 5858 y(is)35 b(added)h(to)f Fr(Suc)-5 b(c)p
Fu(\()p Fs(v)888 5873 y Fe(i)p Ff(\000)p Fi(1)1006 5858
y Fu(\))35 b(in)g(the)h(union)e(op)s(eration)g(at)h(line)f(9)h(of)g
Fq(simple)p 2906 5858 V 39 w(tc)p Fu(\()p Fs(v)3141 5873
y Fe(i)p Ff(\000)p Fi(1)3259 5858 y Fu(\).)52 b(Th)m(us,)38
b(when)p eop
50 15 bop -116 -294 a Fu(50)672 204 y Fj(\(a\))-84 2386
y @beginspecial 0 @llx 0 @lly 298 @urx 366 @ury 1984
@rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 18 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -135 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -267 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-135 -267 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(g) 300 400 null Vertex
(i) 400 400 null Vertex
(b) 200 500 null Vertex
(d) 200 300 null Vertex
(f) 300 500 null Vertex
(h) 400 500 null Vertex
(j) 400 300 null Vertex
(a) 300 600 null Vertex
(c) 200 400 null Vertex
(e) 300 300 null Vertex
(g) (f) [[/edgetype /leftedge ]] Edge
(h) (i) [[/edgetype /leftedge ]] Edge
(a) (b) [[/edgetype /leftedge ]] Edge
(i) (j) [] Edge
(b) (c) [[/edgetype /leftedge ]] Edge
(i) (e) [] Edge
(c) (d) [] Edge
(e) (d) [[/edgetype /leftedge ]] Edge
(f) (g) [[/edgetype /leftedge ]] Edge
(a) (h) [] Edge
(i) (h) [[/edgetype /leftedge ]] Edge
(b) (a) [[/edgetype /leftedge ]] Edge
(i) (c) [[/edgetype /leftedge ][/deviation 0.2 ][/startangle 30 ]] Edge
(c) (b) [[/edgetype /leftedge ]] Edge
(g) (d) [] Edge
(d) (e) [[/edgetype /leftedge ]] Edge
(a) (f) [] Edge
[[135 267 433 633 ]{gsave mark 2.0 4.0 ] 0.0 setdash mark <61><68><69><68><61><62><63><62>] ClosedPolyLine 147 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <34>show mark <66><67>] ClosedPolyLine 247 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <32>show mark <64><65>] ClosedPolyLine 147 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <31>show mark <6a>] ClosedPolyLine 347 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <33>show grestore }] Graphics
$GraphsEnd
 @endspecial 3060 204 a(\(b\))2476 449 y Fu(V)-8 b(ertex)p
2803 489 4 134 v 101 w(Successors)p 2426 492 1418 4 v
2704 586 a Fs(a)p 2803 626 4 134 v 100 w Fu(\()p Fs(a;)17
b(b;)g(c;)g(d;)g(e;)g(f)5 b(;)17 b(g)t(;)g(h;)g(i;)g(j)s
Fu(\))2713 719 y Fs(b)p 2803 759 V 101 w Fu(\()p Fs(a;)g(b;)g(c;)g(d;)g
(e;)g(f)5 b(;)17 b(g)t(;)g(h;)g(i;)g(j)s Fu(\))2713 853
y Fs(c)p 2803 893 V 100 w Fu(\()p Fs(a;)g(b;)g(c;)g(d;)g(e;)g(f)5
b(;)17 b(g)t(;)g(h;)g(i;)g(j)s Fu(\))2704 987 y Fs(d)p
2803 1027 V 100 w Fu(\()p Fs(d;)g(e)o Fu(\))2710 1120
y Fs(e)p 2803 1160 V 100 w Fu(\()p Fs(d;)g(e)o Fu(\))2696
1254 y Fs(f)p 2803 1294 V 111 w Fu(\()p Fs(d;)g(e;)g(f)5
b(;)17 b(g)r Fu(\))2705 1387 y Fs(g)p 2803 1428 V 103
w Fu(\()p Fs(d;)g(e;)g(f)5 b(;)17 b(g)r Fu(\))2699 1521
y Fs(h)p 2803 1561 V 100 w Fu(\()p Fs(a;)g(b;)g(c;)g(d;)g(e;)g(f)5
b(;)17 b(g)t(;)g(h;)g(i;)g(j)s Fu(\))2722 1655 y Fs(i)p
2803 1695 V 100 w Fu(\()p Fs(a;)g(b;)g(c;)g(d;)g(e;)g(f)5
b(;)17 b(g)t(;)g(h;)g(i;)g(j)s Fu(\))2709 1788 y Fs(j)p
2803 1828 V 106 w Fu(\(\))-116 2552 y Fq(Figure)31 b(3.9)p
Fu(:)41 b Fj(\(a\))26 b Fu(Graph)h Fs(G)g Fu(with)f(four)h(strong)g
(comp)s(onen)m(ts.)42 b Fj(\(b\))26 b Fu(The)i(successor)i(sets)e(of)e
(the)i(v)m(ertices)-116 2660 y(of)k Fs(G)p Fu(.)436 3239
y Fj(\(a\))-34 3484 y Fu(V)-8 b(ertex)p 293 3524 V 101
w(Adjacency)34 b(list)p -84 3527 1084 4 v 194 3621 a
Fs(a)p 293 3661 4 134 v 100 w Fu(\()p Fs(b;)17 b(f)5
b(;)17 b(h)p Fu(\))204 3755 y Fs(b)p 293 3795 V 100 w
Fu(\()p Fs(c;)g(a)p Fu(\))203 3888 y Fs(c)p 293 3928
V 100 w Fu(\()p Fs(d;)g(b)p Fu(\))194 4022 y Fs(d)p 293
4062 V 100 w Fu(\()p Fs(e)p Fu(\))200 4155 y Fs(e)p 293
4195 V 100 w Fu(\()p Fs(d)p Fu(\))186 4289 y Fs(f)p 293
4329 V 111 w Fu(\()p Fs(g)t Fu(\))195 4423 y Fs(g)p 293
4463 V 103 w Fu(\()p Fs(f)5 b(;)17 b(d)o Fu(\))189 4556
y Fs(h)p 293 4596 V 100 w Fu(\()p Fs(i)p Fu(\))212 4690
y Fs(i)p 293 4730 V 100 w Fu(\()p Fs(h;)g(j;)g(e;)g(c)p
Fu(\))199 4824 y Fs(j)p 293 4864 V 106 w Fu(\(\))2655
3239 y Fj(\(b\))1616 5354 y @beginspecial 0 @llx 0 @lly
420.990997 @urx 371.024994 @ury 2673 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 27 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -93.5174 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -264.725 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-93.5174 -264.725 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(g) 300 400 null Vertex
(i) 400 400 null Vertex
(b) 200 500 null Vertex
(d) 200 300 null Vertex
(f) 300 500 null Vertex
(h) 400 500 null Vertex
(j) 400 300 null Vertex
(a) 300 600 null Vertex
(c) 200 400 null Vertex
(e) 300 300 null Vertex
(g) (f) [[/edgetype /leftedge ]] Edge
(h) (i) [[/edgetype /leftedge ]] Edge
(a) (b) [[/edgetype /leftedge ]] Edge
(i) (j) [] Edge
(b) (c) [[/edgetype /leftedge ]] Edge
(i) (e) [] Edge
(c) (d) [] Edge
(e) (d) [[/edgetype /leftedge ]] Edge
(f) (g) [[/edgetype /leftedge ]] Edge
(a) (h) [] Edge
(i) (h) [[/edgetype /leftedge ]] Edge
(b) (a) [[/edgetype /leftedge ]] Edge
(i) (c) [[/edgetype /leftedge ][/deviation 0.2 ][/startangle 30 ]] Edge
(c) (b) [[/edgetype /leftedge ]] Edge
(g) (d) [] Edge
(d) (e) [[/edgetype /leftedge ]] Edge
(a) (f) [] Edge
<66>[[/DataFont 0.9 0 <7b642c652c662c677d>]]VertexData
<68>[[/DataFont 0.9 0 <7b612c622c632c642c652c682c692c6a7d>]]VertexData
<6a>[[/DataFont 0 -0.9 <7b7d>]]VertexData
<61>[[/DataFont 0 0.9 <7b612c622c632c642c652c662c672c682c692c6a7d>]]VertexData
<63>[[/DataFont -0.9 0 <7b612c622c632c642c657d>]]VertexData
<65>[[/DataFont 0 -0.9 <7b642c657d>]]VertexData
<67>[[/DataFont 0.9 0 <7b642c652c662c677d>]]VertexData
<69>[[/DataFont 0.9 0 <7b612c622c632c642c652c682c692c6a7d>]]VertexData
<62>[[/DataFont -0.9 0 <7b612c622c632c642c652c662c687d>]]VertexData
<64>[[/DataFont 0 -0.9 <7b642c657d>]]VertexData
$GraphsEnd
 @endspecial -116 5520 a Fq(Figure)37 b(3.10)p Fu(:)44
b Fj(\(a\))32 b Fu(The)h(adjacency)h(lists)e(of)g(graph)h
Fs(G)f Fu(of)g(Figure)g(3.9\(a\))o(.)44 b Fj(\(b\))32
b Fu(The)h(partial)d(successor)-116 5628 y(sets)k(of)e(the)h(v)m
(ertices)g(when)h Fq(simple)p 1281 5628 34 4 v 39 w(tc)e
Fu(is)h(applied)e(to)h Fs(G)p Fu(.)p eop
51 16 bop 3778 -294 a Fu(51)98 18 y(edge)33 b(\()p Fs(v)405
33 y Fi(0)445 18 y Fs(;)17 b(v)536 33 y Fi(1)575 18 y
Fu(\))33 b(has)g(b)s(een)g(pro)s(cessed,)h Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\))32 b(con)m(tains)h Fr(Suc)-5
b(c)p Fu(\()p Fs(u)p Fu(\).)-137 193 y Fj(\(ii\))83 b
Fu(Let)39 b Fs(C)46 b Fu(b)s(e)38 b(a)h(comp)s(onen)m(t)f(at)h(lev)m
(el)f Fs(l)i(>)e Fu(0.)61 b(The)40 b(correct)f(insertion)f(of)g(eac)m
(h)h(v)m(ertex)i Fs(v)h Fu(of)c Fs(C)46 b Fu(in)m(to)98
327 y Fr(Suc)-5 b(c)p Fu(\()p Fs(r)s Fu(\))35 b(can)h(b)s(e)h(sho)m(wn)
g(as)f(in)f(the)h(induction)f(basis.)53 b(W)-8 b(e)37
b(sho)m(w)g(no)m(w)f(that)g(if)e(v)m(ertex)k Fs(v)i Fu(is)35
b(not)h(in)98 460 y Fs(C)i Fu(and)31 b(a)f(non-n)m(ull)f(path)i
Fs(r)1148 407 y Fi(+)1126 460 y Fh(!)o Fs(v)k Fu(exists,)d(then)f
Fs(v)j Fu(is)c(inserted)i(in)m(to)e Fr(Suc)-5 b(c)o Fu(\()p
Fs(r)s Fu(\).)43 b(The)31 b(path)g Fs(r)3440 407 y Fi(+)3418
460 y Fh(!)o Fs(v)k Fu(can)c(b)s(e)98 594 y(divided)c(in)m(to)f(three)i
(parts:)41 b(a)27 b(p)s(ossibly)g(n)m(ull)f(path)h Fs(r)2092
541 y Ff(\003)2060 594 y Fh(!)o Fs(x)g Fu(inside)g Fs(C)7
b Fu(,)28 b(an)f(edge)h(\()p Fs(x;)17 b(y)t Fu(\),)27
b(and)h(a)e(p)s(ossibly)98 728 y(n)m(ull)33 b(path)i
Fs(y)605 674 y Ff(\003)574 728 y Fh(!)o Fs(v)j Fu(outside)c
Fs(C)7 b Fu(.)49 b(If)34 b Fs(y)1431 674 y Ff(\003)1400
728 y Fh(!)o Fs(v)k Fu(is)33 b(n)m(ull,)h(then)h Fs(y)f
Fu(=)c Fs(v)t Fu(.)49 b(Th)m(us,)36 b Fs(v)i Fu(is)c(adjacen)m(t)h
(from)e Fs(x)i Fu(and)f(is)98 861 y(inserted)e(in)m(to)e
Fr(Suc)-5 b(c)p Fu(\()p Fs(x)p Fu(\))31 b(at)f(line)g(5)h(in)f
Fq(simple)p 1828 861 34 4 v 39 w(tc)p Fu(\()p Fs(x)p
Fu(\).)43 b(If)31 b Fs(y)2358 808 y Ff(\003)2327 861
y Fh(!)n Fs(v)k Fu(is)30 b(non-n)m(ull,)g(then)i Fs(v)i
Fu(is)d(a)f(successor)98 995 y(of)d Fs(y)t Fu(.)40 b(Comp)s(onen)m(t)27
b Fs(C)920 959 y Ff(0)970 995 y Fu(that)g(con)m(tains)g
Fs(y)j Fu(is)c(at)h(a)g(lev)m(el)f(b)s(elo)m(w)h Fs(l)r
Fu(.)42 b(By)27 b(the)g(induction)f(h)m(yp)s(othesis,)j(the)98
1129 y(successors)37 b(of)c(comp)s(onen)m(t)h Fs(C)1246
1092 y Ff(0)1303 1129 y Fu(are)f(correctly)h(detected.)49
b(Th)m(us,)35 b Fr(Suc)-5 b(c)p Fu(\()p Fs(y)t Fu(\))33
b(con)m(tains)g(all)f(successors)98 1262 y(of)h Fs(y)j
Fu(b)s(efore)d(the)h(union)e(at)h(line)e(9)i(in)g Fq(simple)p
1848 1262 V 39 w(tc)o Fu(\()p Fs(x)p Fu(\),)h(and)f Fs(v)k
Fu(is)32 b(inserted)i(in)m(to)e Fr(Suc)-5 b(c)p Fu(\()p
Fs(x)p Fu(\))33 b(when)h(the)98 1396 y(union)g(at)f(line)g(9)h(is)f
(executed.)50 b(Without)33 b(loss)h(of)g(generalit)m(y)-8
b(,)33 b(w)m(e)i(can)f(assume)h(that)f(path)g Fs(r)3654
1343 y Ff(\003)3622 1396 y Fh(!)o Fs(x)g Fu(is)98 1529
y(in)k(the)i(depth-\014rst)f(spanning)g(forest)g Fs(F)53
b Fu(induced)39 b(b)m(y)h(the)f(execution)h(of)e Fq(simple)p
3251 1529 V 39 w(tc)p Fu(.)62 b(If)39 b Fs(x)g Fh(6)p
Fu(=)f Fs(r)s Fu(,)98 1663 y(the)e(inclusion)e(of)g Fr(Suc)-5
b(c)p Fu(\()p Fs(x)p Fu(\))35 b(in)m(to)g Fr(Suc)-5 b(c)p
Fu(\()p Fs(r)s Fu(\))34 b(can)i(b)s(e)f(sho)m(wn)i(as)e(in)g(the)g
(induction)g(basis.)51 b(Th)m(us,)37 b Fs(v)i Fu(is)98
1797 y(inserted)33 b(in)m(to)f Fr(Suc)-5 b(c)p Fu(\()p
Fs(r)s Fu(\).)p 1050 1797 4 67 v 1054 1734 59 4 v 1054
1797 V 1111 1797 4 67 v 30 2013 a(The)36 b(most)e(time-consuming)e(op)s
(erations)i(in)g Fq(simple)p 2094 2013 34 4 v 39 w(tc)g
Fu(are)h(the)g(successor)i(set)f(op)s(erations.)49 b(The)-116
2147 y(time)31 b(required)j(b)m(y)g(these)g(op)s(erations)e(dep)s(ends)
j(on)e(the)g(data)g(structures)h(that)f(are)g(used)h(to)f(implemen)m(t)
-116 2280 y(the)g(successor)i(sets.)30 2414 y(Common)h(set)j(data)e
(structures,)j(whic)m(h)e(can)g(b)s(e)g(used)h(to)e(implemen)m(t)e(the)
j(successor)i(sets,)g(are)e(bit)-116 2547 y(matrices)33
b(and)h(bit)f(v)m(ectors,)j(ordered)f(and)f(unordered)h(lists,)e(and)h
(ordered)h(binary)f(searc)m(h)h(trees,)g(whic)m(h)-116
2681 y(ma)m(y)c(or)h(ma)m(y)f(not)h(b)s(e)g(balanced.)43
b(Another)33 b(p)s(ossible)e(data)g(structure)i(is)f(an)f(unordered)i
(list)e(augmen)m(ted)-116 2815 y(with)i(a)g(bit)f(v)m(ector;)j(the)f
(con)m(ten)m(ts)h(of)d(the)i(list)e(are)h(duplicated)g(in)f(the)i(bit)e
(v)m(ector,)j(i.e.,)e(for)g(eac)m(h)h(v)m(ertex)-116
2948 y Fs(v)-69 2963 y Fe(i)-9 2948 y Fu(in)c(the)j(list,)d(the)i
(corresp)s(onding)g(p)s(osition)d Fs(i)j Fu(of)f(the)h(bit)f(v)m(ector)
i(holds)e(one)h(and)g(other)f(p)s(ositions)g(hold)-116
3082 y(zeros.)30 3216 y(In)25 b(computing)e(the)h(w)m(orst-case)i
(execution)f(times,)g(w)m(e)h(use)f(the)g(follo)m(wing)c(w)m(orst-case)
26 b(b)s(ounds)f(for)e(the)-116 3349 y(di\013eren)m(t)35
b(set)g(op)s(erations.)49 b(In)35 b(the)g(bit)e(matrix)h(and)g(bit)g(v)
m(ector)i(represen)m(tations,)g(the)f(initialization)29
b(of)-116 3483 y(an)f(empt)m(y)h(set)g(tak)m(es)h Fs(O)s
Fu(\()p Fs(n)p Fu(\))e(time.)41 b(The)29 b(mem)m(b)s(ership)f(test)h
(and)g(the)g(insertion)e(op)s(eration)h(tak)m(e)h(constan)m(t)-116
3616 y(time,)35 b(and)i(the)f(union)f(op)s(eration)g(tak)m(es)i
Fs(O)s Fu(\()p Fs(n)p Fu(\))f(time.)52 b(In)37 b(the)f(list)f(represen)
m(tation)h(\(b)s(oth)g(ordered)h(and)-116 3750 y(unordered\),)f(the)f
(initialization)30 b(of)k(an)h(empt)m(y)g(set)g(tak)m(es)h(constan)m(t)
g(time.)49 b(The)35 b(mem)m(b)s(ership)f(test)i(and)-116
3884 y(the)30 b(insertion)g(and)g(union)g(op)s(erations)f(tak)m(e)i
Fs(O)s Fu(\()p Fs(n)p Fu(\))f(time.)41 b(\(In)30 b(the)h(union)f(op)s
(eration)f(of)g(unordered)j(lists,)-116 4017 y(w)m(e)g(need)h(a)e(bit)g
(v)m(ector)h(to)f(sp)s(eed)i(up)f(the)g(duplicate)f(elimination.\))38
b(In)32 b(the)g(ordered)g(binary)f(searc)m(h)i(tree)-116
4151 y(represen)m(tation,)41 b(the)d(initialization)33
b(of)38 b(an)h(empt)m(y)g(set)g(tak)m(es)h(constan)m(t)f(time.)60
b(The)39 b(mem)m(b)s(ership)f(test)-116 4285 y(and)28
b(the)h(insertion)e(op)s(erations)h(tak)m(e)h Fs(O)s
Fu(\()p Fs(n)p Fu(\))e(time)g(if)g(the)i(tree)g(is)f(not)g(balanced)g
(and)g Fs(O)s Fu(\(log)16 b Fs(n)p Fu(\))28 b(time)f(if)g(the)-116
4418 y(tree)35 b(is)g(balanced.)50 b(The)36 b(union)e(op)s(eration)g
(tak)m(es)i Fs(O)s Fu(\()p Fs(n)p Fu(\))e(time.)49 b(In)35
b(the)g(list)f(represen)m(tation)i(augmen)m(ted)-116
4552 y(with)30 b(bit)g(v)m(ectors,)j(the)f(initialization)25
b(of)30 b(an)h(empt)m(y)h(set)f(tak)m(es)h Fs(O)s Fu(\()p
Fs(n)p Fu(\))f(time.)41 b(The)32 b(mem)m(b)s(ership)e(test)i(and)-116
4685 y(the)h(insertion)e(op)s(eration)h(tak)m(e)h(constan)m(t)g(time,)f
(and)g(the)h(union)f(op)s(eration)g(tak)m(es)h Fs(O)s
Fu(\()p Fs(n)p Fu(\))f(time.)30 4819 y(W)-8 b(e)24 b(giv)m(e)g(t)m(w)m
(o)h(kinds)f(of)f(w)m(orst-case)i(execution)g(time)d(b)s(ounds.)42
b(A)24 b(w)m(orst-case)h(b)s(ound)f(of)f(the)i(\014rst)f(kind)-116
4953 y(describ)s(es)37 b(the)g(execution)g(time)e(indep)s(enden)m(t)j
(of)e(the)h(successor)i(set)e(implemen)m(tation,)d(i.e.,)j(using)f(the)
-116 5086 y(n)m(um)m(b)s(er)22 b(of)f(initialization,)e(mem)m(b)s
(ership)i(test,)j(insertion,)f(and)f(union)f(op)s(erations)g(needed.)42
b(A)22 b(w)m(orst-case)-116 5220 y(b)s(ound)31 b(of)f(the)i(second)g
(kind)f(describ)s(es)g(the)h(execution)f(time)f(when)i(the)f(successor)
i(set)f(implemen)m(tation)-116 5354 y(is)i(\014xed.)52
b(T)-8 b(o)35 b(describ)s(e)g(the)h(execution)f(time)f(indep)s(enden)m
(t)i(of)e(the)i(successor)h(set)e(implemen)m(tation,)e(w)m(e)-116
5487 y(use)g(the)g(follo)m(wing)d(notation:)30 5703 y
Fs(Z)7 b Fu(\()p Fs(n)p Fu(\))118 b(The)34 b(maxim)m(um)c(time)h(of)h
(creating)g(an)h(empt)m(y)g(set)g(that)f(can)h(hold)f
Fs(n)h Fu(elemen)m(ts.)27 5858 y Fs(F)14 b Fu(\()p Fs(n)p
Fu(\))118 b(The)34 b(maxim)m(um)c(time)h(of)h(a)h(mem)m(b)s(ership)e
(test)j(in)d(a)i(set)g(of)f(at)g(most)g Fs(n)h Fu(elemen)m(ts.)p
eop
52 17 bop -116 -294 a Fu(52)53 18 y Fs(I)8 b Fu(\()p
Fs(n)p Fu(\))118 b(The)34 b(maxim)m(um)c(time)h(of)h(inserting)g(an)g
(elemen)m(t)h(in)m(to)f(a)g(set)h(of)f(at)g(most)g Fs(n)h
Fu(elemen)m(ts.)27 173 y Fs(U)10 b Fu(\()p Fs(n)p Fu(\))119
b(The)34 b(maxim)m(um)c(time)h(of)h(unioning)f(t)m(w)m(o)j(sets)f(of)f
(at)h(most)f Fs(n)g Fu(elemen)m(ts.)-116 394 y(W)-8 b(e)26
b(use)h Fs(n)f Fu(and)g Fs(e)g Fu(to)f(denote)i(the)f(n)m(um)m(b)s(er)g
(of)g(v)m(ertices)h(and)f(edges)g(in)g(the)g(input)f(graph,)i(resp)s
(ectiv)m(ely)-8 b(.)42 b(W)-8 b(e)-116 527 y(omit)25
b(the)i(term)f Fs(O)s Fu(\()p Fs(n)10 b Fu(+)g Fs(e)p
Fu(\))27 b(represen)m(ting)h(the)f(scanning)g(of)f(the)i(input)e(graph)
h(and)g(the)g(strong)g(comp)s(onen)m(t)-116 661 y(detection,)33
b(although)e(it)h(sometimes,)f(e.g.,)i(when)h Fs(e)28
b Fu(=)f(0,)33 b(is)f(the)h(ma)5 b(jor)31 b(cost.)30
795 y(Theorem)i(3.11)f(giv)m(es)h(the)g(implemen)m(tation)c(indep)s
(enden)m(t)34 b(w)m(orst-case)g(b)s(ound)f(of)f Fq(simple)p
3506 795 34 4 v 39 w(tc)p Fu(.)-116 1015 y Fj(Theorem)40
b(3.11.)c Fu(Algorithm)d Fq(simple)p 1420 1015 V 39 w(tc)i
Fu(runs)i(in)d Fs(O)s Fu(\()p Fs(nZ)7 b Fu(\()p Fs(n)p
Fu(\))24 b(+)g Fs(eI)8 b Fu(\()p Fs(n)p Fu(\))25 b(+)f
Fs(eU)10 b Fu(\()p Fs(n)p Fu(\)\))36 b(time)e(in)h(the)h(w)m(orst)-116
1149 y(case.)-116 1368 y Fj(Pro)s(of.)121 b Fu(A)42 b(partial)e
(successor)45 b(set)e(is)e(initialized)e(at)j(line)f(5)h(b)m(y)h
(creating)e(an)i(empt)m(y)f(successor)j(set,)-116 1502
y(scanning)i(the)g(edges)h(lea)m(ving)e Fs(v)t Fu(,)k(and)d(inserting)f
(the)i(heads)f(of)g(the)g(edges)h(in)m(to)e(the)i(successor)h(set.)-116
1636 y(Since)41 b Fs(e)f Fu(edges)i(and)f Fs(n)g Fu(successor)i(sets)f
(exist,)h(this)d(tak)m(es)i Fs(O)s Fu(\()p Fs(nZ)7 b
Fu(\()p Fs(n)p Fu(\))27 b(+)h Fs(eI)8 b Fu(\()p Fs(n)p
Fu(\)\))40 b(total)f(time.)67 b(Line)40 b(9)g(is)-116
1769 y(executed)33 b Fs(e)f Fu(times,)f(once)h(for)f(eac)m(h)h(edge.)44
b(Hence)33 b(the)f(unions)f(tak)m(e)h Fs(O)s Fu(\()p
Fs(eU)10 b Fu(\()p Fs(n)p Fu(\)\))32 b(time)e(in)h(the)h(w)m(orst)g
(case.)-116 1903 y(The)44 b(p)s(oin)m(ter)e(assignmen)m(ts)i(at)f(line)
f(17)g(tak)m(e)i(\002\()p Fs(n)p Fu(\))f(time.)74 b(Summing)41
b(these)k(terms)e(yields)g(the)g(limit)-116 2037 y Fs(O)s
Fu(\()p Fs(nZ)7 b Fu(\()p Fs(n)p Fu(\))21 b(+)h Fs(eI)8
b Fu(\()p Fs(n)p Fu(\))23 b(+)f Fs(eU)10 b Fu(\()p Fs(n)p
Fu(\)\).)p 1100 2037 4 67 v 1104 1974 59 4 v 1104 2037
V 1161 2037 4 67 v -116 2256 a Fj(Corollary)24 b(3.12.)f
Fu(Algorithm)c Fq(simple)p 1401 2256 34 4 v 39 w(tc)k
Fu(runs)g(in)f Fs(O)s Fu(\()p Fs(ne)p Fu(\))g(time)f(in)g(the)i(w)m
(orst)h(case)f(when)h(the)e(successor)-116 2390 y(sets)34
b(are)e(implemen)m(ted)f(as)i(ordered)g(lists)f(or)g(ordered)h(binary)g
(trees.)30 2610 y(This)39 b(is)g(the)g(b)s(est)h(w)m(orst-case)h(b)s
(ound)e(that)g(can)g(b)s(e)g(ac)m(hiev)m(ed)i(with)e
Fq(simple)p 3029 2610 V 39 w(tc)f Fu(when)j(the)e(usual)-116
2744 y(successor)c(set)e(data)f(structures)i(discussed)h(ab)s(o)m(v)m
(e)e(are)g(used.)30 2878 y(Although)45 b Fq(simple)p
794 2878 V 39 w(tc)g Fu(tra)m(v)m(erses)j(the)e(input)f(graph)g
(exactly)h(once,)k(it)44 b(is)h(often)h(ine\016cien)m(t.)82
b(As)-116 3011 y(Example)46 b(3.4)g(sho)m(w)m(ed,)52
b(the)c(total)d(size)i(of)f(the)h(partial)d(successor)49
b(sets)f(and)f(the)g(n)m(um)m(b)s(er)g(of)f(union)-116
3145 y(op)s(erations)25 b(needed)j(to)e(create)g(these)i(sets)f(is)f
(often)g(high.)40 b(The)27 b(next)g(example)f(rev)m(eals)h(a)f(sev)m
(ere)i(problem)-116 3279 y(in)k Fq(simple)p 318 3279
V 39 w(tc)o Fu(.)-116 3499 y Fj(Example)46 b(3.5.)41
b Fu(Figure)31 b(3.11)40 b(presen)m(ts)j(a)e(cycle)g(of)f
Fs(n)h Fu(v)m(ertices.)69 b(Assuming)40 b(that)h Fq(simple)p
3446 3499 V 39 w(tc)f Fu(starts)-116 3633 y(at)49 b(v)m(ertex)j
Fs(v)380 3648 y Fi(1)420 3633 y Fu(,)i(it)49 b(en)m(ters)i(the)g(v)m
(ertices)g(recursiv)m(ely)g(in)e(order)h Fs(v)2427 3648
y Fi(1)2466 3633 y Fs(;)17 b(v)2557 3648 y Fi(2)2597
3633 y Fs(;)g(:)g(:)g(:)f(;)h(v)2863 3648 y Fe(n)2909
3633 y Fu(.)96 b(F)-8 b(or)49 b(eac)m(h)i(v)m(ertex)g
Fs(v)3820 3648 y Fe(i)3849 3633 y Fu(,)-116 3766 y Fq(simple)p
204 3766 V 39 w(tc)45 b Fu(initializes)d(the)k(successor)h(set)f
Fr(Suc)-5 b(c)p Fu(\()p Fs(v)1900 3781 y Fe(i)1928 3766
y Fu(\))46 b(to)f Fh(f)p Fs(v)2241 3781 y Fe(i)p Fi(+1)2359
3766 y Fh(g)g Fu(at)g(line)f(5.)82 b Fr(Suc)-5 b(c)o
Fu(\()p Fs(v)3217 3781 y Fe(n)3264 3766 y Fu(\))46 b(is)f(initialized)
-116 3900 y(to)30 b Fh(f)p Fs(v)98 3915 y Fi(1)138 3900
y Fh(g)p Fu(.)42 b Fq(simple)p 577 3900 V 39 w(tc)31
b Fu(do)s(es)g(not)g(tra)m(v)m(erse)h(\()p Fs(v)1597
3915 y Fe(n)1644 3900 y Fs(;)17 b(v)1735 3915 y Fi(1)1775
3900 y Fu(\),)31 b(since)g Fs(v)2155 3915 y Fi(1)2225
3900 y Fu(is)g(already)f(visited.)42 b Fq(simple)p 3333
3900 V 40 w(tc)30 b Fu(adds)h(the)-116 4033 y(con)m(ten)m(ts)j(of)f
Fr(Suc)-5 b(c)o Fu(\()p Fs(v)657 4048 y Fi(1)697 4033
y Fu(\))33 b(in)m(to)f Fr(Suc)-5 b(c)o Fu(\()p Fs(v)1242
4048 y Fe(n)1289 4033 y Fu(\).)44 b(After)33 b(this,)g
Fr(Suc)-5 b(c)p Fu(\()p Fs(v)2148 4048 y Fe(n)2195 4033
y Fu(\))28 b(=)f Fh(f)p Fs(v)2461 4048 y Fi(1)2501 4033
y Fs(;)17 b(v)2592 4048 y Fi(2)2631 4033 y Fh(g)p Fu(.)44
b(Then)34 b Fq(simple)p 3327 4033 V 39 w(tc)e Fu(exits)h(the)-116
4167 y(v)m(ertices)39 b(in)e(order)i Fs(v)669 4182 y
Fe(n)716 4167 y Fs(;)17 b(v)807 4182 y Fe(n)p Ff(\000)p
Fi(1)944 4167 y Fs(;)g(:)g(:)g(:)f(;)h(v)1210 4182 y
Fi(1)1249 4167 y Fu(.)60 b(When)39 b Fq(simple)p 1946
4167 V 39 w(tc)f Fu(exits)g(v)m(ertex)i Fs(v)2718 4182
y Fe(i)p Fi(+1)2836 4167 y Fu(,)g(it)d(adds)h Fr(Suc)-5
b(c)p Fu(\()p Fs(v)3516 4182 y Fe(i)p Fi(+1)3635 4167
y Fu(\))38 b(in)m(to)-116 4301 y Fr(Suc)-5 b(c)p Fu(\()p
Fs(v)161 4316 y Fe(i)189 4301 y Fu(\).)42 b(This)27 b(w)m(a)m(y)-8
b(,)30 b(eac)m(h)f(v)m(ertex)h(receiv)m(es)f(a)e(partial)f(successor)k
(set)e(that)g(is)f(larger)g(than)g(the)h(successor)-116
4434 y(set)g(of)e(its)h(c)m(hild)f(v)m(ertex.)44 b(The)28
b(total)e(memory)g(requiremen)m(t)i(for)e(these)j(sets)f(is)f(\012\()p
Fs(n)2992 4398 y Fi(2)3032 4434 y Fu(\),)h(and)g(the)f(execution)-116
4568 y(tak)m(es)37 b(\012\()p Fs(n)303 4532 y Fi(2)343
4568 y Fu(\))f(time.)52 b(This)36 b(is)f(ine\016cien)m(t,)i(since)g
(the)f(graph)g(only)f(has)h Fs(n)g Fu(edges)h(and)f(only)g(con)m(tains)
g(one)-116 4702 y(strong)c(comp)s(onen)m(t.)p 719 4702
4 67 v 723 4638 59 4 v 723 4702 V 780 4702 4 67 v 30
4922 a(Example)48 b(3.5)f(is)h(not)g(an)g(exception,)53
b(but)48 b(rather)g(the)h(rule.)89 b Fq(simple)p 2845
4922 34 4 v 39 w(tc)48 b Fu(do)s(es)h(not)e(a)m(v)m(oid)h(the)-116
5055 y(redundan)m(t)34 b(op)s(erations)d(caused)j(b)m(y)g(strong)e
(comp)s(onen)m(ts.)30 5190 y(T)-8 b(o)35 b(design)g(a)g(b)s(etter)h
(algorithm,)d(w)m(e)j(analyze)f(the)g(de\014ciencies)h(in)f
Fq(simple)p 2941 5190 V 39 w(tc)g Fu(that)g(lead)f(to)h(large)-116
5323 y(partial)42 b(successor)48 b(sets)e(and)f(unnecessary)j
(successor)f(set)f(op)s(erations.)80 b(Some)44 b(of)h(these)h
(de\014ciencies)-116 5457 y(are)38 b(a)m(v)m(oided)h(in)e(previous)i
(transitiv)m(e)f(closure)g(algorithms)e(that)i(compute)h(the)f
(successor)j(sets)f(during)-116 5591 y(the)34 b(detection)g(of)f
(strong)h(comp)s(onen)m(ts,)h(namely)e(Ev)m(e's)j(and)e(Kurki-Suonio's)
e(algorithm)f([40],)j(Eb)s(ert's)-116 5724 y(algorithm)43
b([36)o(],)50 b(and)d(the)f(algorithm)d Fq(gdftc)k Fu(b)m(y)g
(Ioannidis)e(et)i(al.)83 b([64)o(].)i(Ho)m(w)m(ev)m(er,)52
b(considerable)-116 5858 y(impro)m(v)m(emen)m(ts)33 b(are)f(still)e(p)s
(ossible.)p eop
53 18 bop 3778 -294 a Fu(53)226 2141 y @beginspecial
0 @llx 0 @lly 512 @urx 344 @ury 3968 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/id <36>def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }forall }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 15 def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sx2 r 2 div def /sx3 r VRad StartAngle cos mul sub def /sy13 VRad StartAngle sin mul def /sr sx3 sx1 sub def /sy2 sy13 sr Deviation mul add def EdgeType /leftedge eq {false sx1 sy13 sx2 sy2 sx3 sy13 }{true sx1 sy13 neg sx2 sy2 neg sx3 sy13 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -14 def 
/Fonts [[/ScriptFont /Times-Roman 10 ][/DataFont /Times-Roman 16 ][/LabelFont /Times-Roman 16 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/i 5 def 
/loc 5 def 
/x 398.995 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -330 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/y 401.005 def 
/a 225 def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-14 -330 13 [[/ScriptFont /Times-Roman 10 ][/DataFont /Times-Roman 16 ][/LabelFont /Times-Roman 16 ]] /Normal  InitGraph
(n) 398.995 598.995 null Vertex
(1) 300.0 640.0 null Vertex
(n-2) 398.995 401.005 [[/Visible false ]] Vertex
(3) 160.0 500.0 null Vertex
(5) 300.0 360.0 null Vertex
(n-1) 440.0 500.0 null Vertex
(2) 201.005 598.995 null Vertex
(4) 201.005 401.005 null Vertex
(6) 398.995 401.005 [[/Visible false ]] Vertex
(n-1) (n) null Edge
(1) (2) null Edge
(3) (4) null Edge
(5) (6) null Edge
(n-2) (n-1) null Edge
(n) (1) null Edge
(2) (3) null Edge
(4) (5) null Edge
[[243 656 330 674 ]{gsave 258 663 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c202e2e2e2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[14 499 136 517 ]{gsave 14 499 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <34>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <35>show DataFont setfont 1 6 rmoveto <2c202e2e2e2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[237 330 359 348 ]{gsave 237 337 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <36>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <37>show DataFont setfont 1 6 rmoveto <2c202e2e2e2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[421 591 463 609 ]{gsave 421 598 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[93 591 177 609 ]{gsave 93 598 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c202e2e2e2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[55 400 177 418 ]{gsave 55 400 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <35>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <36>show DataFont setfont 1 6 rmoveto <2c202e2e2e2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[462 499 526 517 ]{gsave 462 499 moveto DataFont setfont <7b76>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <2c2076>show ScriptFont setfont -2 -6 rmoveto <6e>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
$GraphsEnd
 @endspecial 548 2332 a Fq(Figure)38 b(3.11)p Fu(:)43
b(A)33 b(cycle)g(with)f(partially)e(computed)j(successor)i(sets.)30
2640 y(A)26 b(de\014ciency)h(in)e Fq(simple)p 996 2640
34 4 v 39 w(tc)h Fu(is)f(that)h(the)g(algorithm)d(inserts)j(the)g(mem)m
(b)s(ers)g(of)f(a)h(comp)s(onen)m(t)g Fs(C)33 b Fu(in)m(to)-116
2773 y Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))39 b(exactly)h(as)g(it)e
(inserts)j(the)f(other)f(successors)k(in)m(to)c Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\).)64 b(This)40 b(pro)s(duces)h(large)d
(partial)-116 2907 y(successor)33 b(sets)f(ev)m(en)h(when)f(most)e
(successors)k(of)c(a)h(comp)s(onen)m(t)g(are)f(inside)h(that)f(comp)s
(onen)m(t.)43 b(T)-8 b(o)31 b(get)g(a)-116 3040 y(b)s(etter)36
b(strategy)-8 b(,)37 b(w)m(e)g(need)g(the)f(conditions)f(for)h
(inserting)e(a)i(comp)s(onen)m(t)g(mem)m(b)s(er)f(in)m(to)g(the)h
(successor)-116 3174 y(set)41 b(of)f(that)h(comp)s(onen)m(t.)67
b(First,)42 b(if)e(the)h(comp)s(onen)m(t)g(has)g(more)f(than)g(one)h
(mem)m(b)s(er,)h(all)d(comp)s(onen)m(t)-116 3308 y(mem)m(b)s(ers)c(are)
g(successors)i(of)e(eac)m(h)h(other.)51 b(Second,)36
b(if)e(the)i(comp)s(onen)m(t)f(has)g(only)f(one)i(mem)m(b)s(er)e
Fs(v)39 b Fu(and)-116 3441 y(an)h(edge)i(\()p Fs(v)t(;)17
b(v)t Fu(\))39 b(exists,)44 b(then)d Fs(v)k Fu(is)40
b(its)g(o)m(wn)i(successor.)70 b(The)42 b(b)s(etter)f(strategy)g(is)f
(to)h(record)g(self-lo)s(op)-116 3575 y(edges)c(\()p
Fs(v)t(;)17 b(v)t Fu(\))34 b(and)i(ignore)f(all)e(other)j(in)m(tracomp)
s(onen)m(t)f(edges)i(when)g(initializing)30 b(the)36
b(partial)d(successor)-116 3709 y(sets)28 b(at)f(line)e(5)i(in)f
Fq(simple)p 865 3709 V 39 w(tc)p Fu(.)42 b(When)28 b(a)e(comp)s(onen)m
(t)h(is)g(detected,)j(w)m(e)e(insert)f(the)g(comp)s(onen)m(t)g(mem)m(b)
s(ers)-116 3842 y(in)m(to)k(the)i(successor)h(set)f(of)f(the)g(comp)s
(onen)m(t)g(i\013)g(the)g(comp)s(onen)m(t)g(has)h(more)e(than)h(one)h
(v)m(ertex)h(or)d(only)h(a)-116 3976 y(single)j(v)m(ertex)j
Fs(v)i Fu(and)d(a)f(self-lo)s(op)e(\()p Fs(v)t(;)17 b(v)t
Fu(\))35 b(exists.)56 b(This)36 b(w)m(a)m(y)i(w)m(e)f(can)g(insert)f
(the)h(comp)s(onen)m(t)f(mem)m(b)s(ers)-116 4109 y(in)m(to)27
b(the)i(successor)h(set)f(of)f(the)g(comp)s(onen)m(t)h(in)e
Fs(O)s Fu(\()p Fs(n)13 b Fu(+)g Fs(e)p Fu(\))28 b(time.)41
b(The)29 b(pro)s(cessing)f(of)g(the)g(example)g(graph)-116
4243 y(in)k(Figure)f(3.11)h(w)m(ould)h(tak)m(e)g Fs(O)s
Fu(\()p Fs(n)p Fu(\))f(time)f(instead)i(of)f Fs(O)s Fu(\()p
Fs(n)2095 4207 y Fi(2)2134 4243 y Fu(\))g(time.)30 4388
y(Separating)j(the)i(pro)s(cessing)f(of)g(comp)s(onen)m(t)g(mem)m(b)s
(ers)g(from)f(the)i(pro)s(cessing)f(of)g(other)g(successors)-116
4522 y(mak)m(es)f(another)g(optimization)d(p)s(ossible.)50
b(Instead)35 b(of)g(building)e(the)i(successor)i(sets)f(from)e(v)m
(ertices,)j(w)m(e)-116 4655 y(can)30 b(build)f(them)i(from)e(strong)h
(comp)s(onen)m(ts)h(and)f(sa)m(v)m(e)i(m)m(uc)m(h)f(space.)44
b(Th)m(us,)33 b(w)m(e)e(actually)e(compute)h(the)-116
4789 y(transitiv)m(e)e(closure)g(of)g(the)h(condensation)g(graph)f
(induced)h(b)m(y)h(the)f(strong)f(comp)s(onen)m(ts)h(as)g(in)f
(Purdom's)-116 4922 y(seminal)40 b(algorithm)g([101)o(].)74
b(Here)43 b(w)m(e)g(b)s(ene\014t)h(from)d(the)i(prop)s(ert)m(y)g(of)f
(T)-8 b(arjan's)43 b(algorithm)c(that)j(the)-116 5056
y(comp)s(onen)m(ts)f(are)h(detected)h(in)d(a)h(rev)m(erse)i(top)s
(ological)38 b(order,)43 b(i.e.,)h(if)c(a)h(path)g(from)f(a)h(comp)s
(onen)m(t)g Fs(C)-116 5190 y Fu(to)d(a)g(di\013eren)m(t)h(comp)s(onen)m
(t)g Fs(C)1069 5154 y Ff(0)1130 5190 y Fu(exists,)i(then)e
Fs(C)1739 5154 y Ff(0)1801 5190 y Fu(is)f(detected)i(\014rst.)62
b(Unlik)m(e)38 b(in)g(Purdom's)h(algorithm,)-116 5323
y(no)f(separate)h(top)s(ological)c(sorting)i(of)h(the)h(comp)s(onen)m
(ts)g(is)f(needed.)63 b(Storing)37 b(strong)h(comp)s(onen)m(ts)h(in-)
-116 5457 y(stead)c(of)g(v)m(ertices)h(in)e(the)i(successor)h(sets)f
(sa)m(v)m(es)h(m)m(uc)m(h)f(memory)e(space.)51 b(The)36
b(mem)m(b)s(ers)f(of)f(the)i(strong)-116 5591 y(comp)s(onen)m(ts)30
b(and)g(the)h(successor)h(sets)f(that)f(con)m(tain)f(strong)h(comp)s
(onen)m(ts)h(b)s(ear)f(the)g(same)g(information)-116
5724 y(as)41 b(the)g(successor)j(sets)e(that)e(con)m(tain)h(v)m
(ertices.)70 b(Answ)m(ering)41 b(a)g(query)h(lik)m(e)f(\\is)f(v)m
(ertex)i Fs(u)f Fu(a)f(successor)-116 5858 y(of)i(v)m(ertex)j
Fs(v)t Fu(?")73 b(can)43 b(b)s(e)g(implemen)m(ted)f(b)m(y)h(c)m(hec)m
(king)h(if)e Fr(Comp)o Fu(\()p Fs(u)p Fu(\))g(is)h(con)m(tained)f(in)g
Fr(Suc)-5 b(c)p Fu(\()p Fr(Comp)o Fu(\()p Fs(v)t Fu(\)\).)p
eop
54 19 bop -116 -294 a Fu(54)982 2261 y @beginspecial
0 @llx 0 @lly 328 @urx 428 @ury 2154 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/DataItemXskip {1 get }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/DataItemString {3 get }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/DataItemFont {0 get load }bind def 
/DataItemYskip {2 get }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 19 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/VertexX {1 get }bind def 
/OrigoX -36.0 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -186.0 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-36.0 -186.0 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(l) 350 200 null Vertex
(a) 200 600 null Vertex
(c) 200 500 null Vertex
(e) 200 400 null Vertex
(g) 200 300 null Vertex
(i) 50 200 null Vertex
(k) 250 200 null Vertex
(b) 100 500 null Vertex
(d) 300 500 null Vertex
(f) 100 300 null Vertex
(h) 300 300 null Vertex
(j) 150 200 null Vertex
(e) (h) [] Edge
(a) (c) [[/edgetype /leftedge ]] Edge
(f) (j) [] Edge
(b) (e) [] Edge
(g) (k) [] Edge
(c) (b) [] Edge
(h) (l) [] Edge
(c) (e) [[/edgetype /leftedge ]] Edge
(e) (c) [[/edgetype /leftedge ]] Edge
(e) (g) [] Edge
(a) (b) [] Edge
(f) (i) [] Edge
(a) (d) [] Edge
(g) (j) [] Edge
(c) (a) [[/edgetype /leftedge ]] Edge
(h) (k) [] Edge
(c) (d) [] Edge
(d) (e) [] Edge
(e) (f) [] Edge
$GraphsEnd
 @endspecial 83 2453 a Fq(Figure)37 b(3.12)p Fu(:)43
b(An)33 b(example)f(graph)h(that)f(leads)h(to)f(redundan)m(t)i(op)s
(erations)d(in)h Fq(simple)p 3500 2453 34 4 v 39 w(tc)p
Fu(.)-116 2740 y(All)i(successors)39 b(of)d(a)g(v)m(ertex)i
Fs(v)i Fu(can)c(b)s(e)g(en)m(umerated)h(b)m(y)g(listing)d(the)j(mem)m
(b)s(ers)f(of)f(the)i(comp)s(onen)m(ts)g(in)-116 2874
y Fr(Suc)-5 b(c)p Fu(\()p Fr(Comp)o Fu(\()p Fs(v)t Fu(\)\).)46
b(The)34 b(computational)d(complexit)m(y)i(of)g(answ)m(ering)h(these)h
(queries)g(is)e(here)h(not)g(greater)-116 3007 y(than)e(if)f(the)i
(successor)i(sets)f(con)m(tained)e(v)m(ertices)i(instead)e(of)g(comp)s
(onen)m(ts.)87 b(The)34 b(previous)f(algorithms)-116
3141 y([36)o(,)g(40,)f(64])g(do)h(not)f(use)i(either)e(of)g(these)i
(optimizations.)30 3276 y(Another)h(de\014ciency)g(in)f
Fq(simple)p 1298 3276 V 39 w(tc)g Fu(is)f(that)h(it)f(uses)j(all)c
(edges)j(in)f(computing)e(the)j(successor)i(sets.)-116
3409 y(It)26 b(adds)h(the)g(successor)h(set)f(of)f(the)h(head)f(of)g
(eac)m(h)h(edge)g(to)f(the)h(successor)h(set)f(of)f(the)h(tail)d(of)h
(that)h(edge.)43 b(In)-116 3543 y(Example)31 b(3.5,)h(this)f(results)i
(in)e Fs(n)h Fu(union)f(op)s(erations)g(of)g(partial)f(successor)k
(sets)f(of)f(size)g Fs(O)s Fu(\()p Fs(n)p Fu(\).)42 b(Another)-116
3676 y(example)32 b(is)g(giv)m(en)h(b)s(elo)m(w.)-116
3899 y Fj(Example)45 b(3.6.)c Fu(Figure)31 b(3.12)40
b(sho)m(ws)i(a)e(graph)h(with)f(a)g(strong)g(comp)s(onen)m(t)h
Fs(C)2955 3914 y Fi(1)3035 3899 y Fu(=)g Fh(f)p Fs(a;)17
b(b;)g(c;)g(d;)g(e)p Fh(g)39 b Fu(that)-116 4032 y(is)46
b(connected)i(to)f(an)f(acyclic)g(subgraph.)87 b(If)46
b Fq(simple)p 2014 4032 V 39 w(tc)h Fu(tra)m(v)m(erses)i(the)e(graph)f
(starting)g(at)g(v)m(ertex)-116 4166 y Fs(a)p Fu(,)f(it)d(propagates)h
(the)g(v)m(ertices)h(of)f(the)g(acyclic)f(subgraph)i(from)d(v)m(ertex)k
Fs(e)e Fu(to)f(ro)s(ot)g(v)m(ertex)j Fs(a)e Fu(via)f(all)-116
4299 y(in)m(tracomp)s(onen)m(t)32 b(edges,)h(requiring)f(10)g(union)g
(op)s(erations.)p 2202 4299 4 67 v 2206 4236 59 4 v 2206
4299 V 2263 4299 4 67 v 30 4522 a(A)23 b(more)g(careful)g(analysis)f
(sho)m(ws)j(that)e(only)g(a)f(subset)j(of)e(all)e(edges)j(is)f(needed)i
(to)e(correctly)g(propagate)-116 4655 y(the)38 b(successor)i(sets.)59
b(All)36 b(forw)m(ard)i(edges)h(can)e(b)s(e)h(ignored,)g(since)g(for)f
(eac)m(h)i(forw)m(ard)f(edge)g(\()p Fs(v)t(;)17 b(w)s
Fu(\),)37 b(the)-116 4789 y(input)25 b(graph)g(con)m(tains)h(a)f(path)h
Fs(v)1160 4736 y Ff(\003)1128 4789 y Fh(!)o Fs(w)i Fu(consisting)d
(solely)g(of)g(tree)h(edges.)43 b(The)26 b(successors)i(of)e
Fs(w)i Fu(are)d(added)-116 4922 y(in)m(to)34 b(the)h(successors)j(of)c
Fs(v)k Fu(via)d(this)f(path.)50 b(All)33 b(bac)m(k)j(edges)g(and)f(in)m
(tracomp)s(onen)m(t)f(cross)i(edges)g(can)f(b)s(e)-116
5056 y(ignored,)40 b(since)g(they)g(pro)s(duce)f(no)g(new)i(successors)
h(to)c(the)i(successor)h(set)f(of)f(the)h(ro)s(ot)e(v)m(ertex)j(of)d
(the)-116 5190 y(comp)s(onen)m(t)29 b(con)m(taining)g(the)h(edge.)43
b(Eb)s(ert's)31 b(algorithm)26 b([36])j(and)h(the)g(algorithm)d
Fq(gdftc)i Fu(b)m(y)i(Ioannidis)-116 5323 y(et)f(al.)41
b([64])29 b(a)m(v)m(oid)h(forw)m(ard)g(edges,)h(bac)m(k)g(edges,)g(and)
f(in)m(tracomp)s(onen)m(t)f(cross)h(edges.)44 b(These)32
b(algorithms)-116 5457 y(only)41 b(use)h(tree)g(edges)g(and)g(in)m
(tercomp)s(onen)m(t)f(cross)h(edges)h(to)e(propagate)g(successor)i
(sets.)71 b(Ev)m(e's)44 b(and)-116 5591 y(Kurki-Suonio's)35
b(algorithm)f(do)s(es)j(not)g(use)g(an)m(y)h(in)m(tracomp)s(onen)m(t)e
(edges)i(to)e(propagate)g(the)h(successor)-116 5724 y(sets.)43
b(Instead,)30 b(when)f(the)g(comp)s(onen)m(t)f(is)g(detected,)i(the)f
(algorithm)c(unions)j(the)g(partial)e(successor)31 b(sets.)-116
5858 y(The)f(n)m(um)m(b)s(er)g(of)f(union)g(op)s(erations)f(needed)j
(to)e(com)m(bine)g(the)h(partial)d(successor)32 b(sets)f(is)e(the)h
(same)f(as)h(in)p eop
55 20 bop 3778 -294 a Fu(55)1230 1788 y @beginspecial
0 @llx 0 @lly 228 @urx 328 @ury 1559 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 6 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -86.0 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -286.0 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-86.0 -286.0 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(a) 200 600 null Vertex
(c) 200 400 null Vertex
(e) 200 300 null Vertex
(b) 100 500 null Vertex
(d) 100 300 null Vertex
(f) 300 300 null Vertex
(a) (c) [] Edge
(c) (d) [] Edge
(c) (f) [] Edge
(a) (b) [] Edge
(b) (c) [] Edge
(c) (e) [] Edge
$GraphsEnd
 @endspecial -43 1979 a Fq(Figure)37 b(3.13)p Fu(:)44
b(An)32 b(example)g(graph)h(that)f(causes)i Fq(simple)p
2252 1979 34 4 v 39 w(tc)f Fu(to)f(add)h Fr(Suc)-5 b(c)o
Fu(\()p Fs(c)p Fu(\))33 b(t)m(wice)g(to)f Fr(Suc)-5 b(c)p
Fu(\()p Fs(a)p Fu(\).)-116 2327 y(Eb)s(ert's)29 b(algorithm)24
b(and)k(algorithm)d Fq(gdftc)p Fu(.)42 b(The)28 b(w)m(eakness)j(in)c
(Ev)m(e's)j(and)d(Kurki-Suonio's)g(algorithm)-116 2460
y(is)32 b(that)g(it)g(propagates)g(successor)j(sets)f(via)e(in)m
(tercomp)s(onen)m(t)g(forw)m(ard)h(edges.)30 2622 y(F)-8
b(urther,)27 b(when)f(w)m(e)g(are)f(pro)s(cessing)g(an)f(edge)i(\()p
Fs(v)t(;)17 b(w)s Fu(\),)25 b(w)m(e)h(should)f(not)g(add)g
Fr(Suc)-5 b(c)o Fu(\()p Fs(w)s Fu(\))25 b(again)e(to)i
Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\))-116 2756 y(if)28
b Fr(Suc)-5 b(c)p Fu(\()p Fs(w)s Fu(\))29 b(is)f(already)h(a)h(subset)h
(of)e Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\).)42 b(F)-8
b(or)29 b(instance,)i(if)d Fq(simple)p 2628 2756 V 39
w(tc)h Fu(is)g(applied)f(to)h(the)h(graph)g(in)-116 2890
y(Figure)h(3.13,)i(the)g(successor)j(set)d Fr(Suc)-5
b(c)p Fu(\()p Fs(c)p Fu(\))33 b(is)f(added)i(t)m(wice)f(to)g
Fr(Suc)-5 b(c)p Fu(\()p Fs(a)p Fu(\),)33 b(once)h(via)e(edge)h(\()p
Fs(a;)17 b(c)p Fu(\))33 b(and)g(once)-116 3023 y(via)c(path)g(\()p
Fs(a;)17 b(b)p Fu(\))p Fs(;)g Fu(\()p Fs(b;)g(c)p Fu(\).)43
b(In)30 b(general,)g(this)f(happ)s(ens)h(alw)m(a)m(ys)h(when)f
Fq(simple)p 2721 3023 V 39 w(tc)g Fu(is)f(applied)f(to)i(an)m(y)g
(graph)-116 3157 y(ha)m(ving)g(pairs)g(of)g(v)m(ertices)i(that)e(are)g
(connected)j(via)c(m)m(ultiple)f(paths.)44 b(Detecting)30
b(all)e(situations)h(when)j(a)-116 3290 y(successor)37
b(set)f Fr(Suc)-5 b(c)p Fu(\()p Fs(w)s Fu(\))34 b(is)h(a)g(subset)i(of)
d(the)i(target)f(set)g Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t
Fu(\))35 b(requires)h(a)f(general)f(set)i(con)m(tainmen)m(t)-116
3424 y(test)46 b(and)f(is)g(probably)g(to)s(o)f(exp)s(ensiv)m(e,)50
b(but)c(w)m(e)g(can)g(detect)g(man)m(y)f(suc)m(h)i(situations)d(if)g(w)
m(e)i(use)g(the)-116 3558 y(follo)m(wing)e(observ)-5
b(ation:)73 b(a)46 b(completely)h(computed)g(successor)j(set)d
Fr(Suc)-5 b(c)p Fu(\()p Fs(w)s Fu(\))47 b(is)f(a)h(prop)s(er)h(subset)g
(of)-116 3691 y(another)35 b(completely)e(computed)i(successor)i(set)f
Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t Fu(\))34 b(i\013)f Fr(Suc)-5
b(c)p Fu(\()p Fs(v)t Fu(\))35 b(con)m(tains)f Fs(w)s
Fu(.)50 b(Th)m(us,)37 b(if)c(w)m(e)j(insert)-116 3825
y(a)29 b(v)m(ertex)i Fs(w)h Fu(and)e(its)f(successor)j(set)e
Fr(Suc)-5 b(c)p Fu(\()p Fs(w)s Fu(\))29 b(in)m(to)g(another)g
(successor)j(set)f Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\))30
b(alw)m(a)m(ys)g(at)f(the)h(same)-116 3959 y(time,)j(w)m(e)i(can)f(a)m
(v)m(oid)g(inserting)f Fr(Suc)-5 b(c)p Fu(\()p Fs(w)s
Fu(\))33 b(in)m(to)h Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t Fu(\))33
b(again)g(simply)f(b)m(y)j(c)m(hec)m(king)h(if)d Fs(w)j
Fu(is)e(a)f(mem)m(b)s(er)-116 4092 y(of)41 b Fr(Suc)-5
b(c)p Fu(\()p Fs(v)t Fu(\).)72 b(Ob)m(viously)-8 b(,)44
b(all)c(successor)45 b(sets)e(should)f(b)s(e)g(initialized)c(to)k(empt)
m(y)h(sets.)73 b(This)42 b(strategy)-116 4226 y(is)e(used)h(in)e(some)i
(previous)f(transitiv)m(e)g(closure)g(algorithms)e(that)i(compute)g
(the)h(successor)i(sets)e(after)-116 4359 y(detecting)27
b(the)g(comp)s(onen)m(ts)h([45)o(,)f(64,)g(101)o(],)i(but)e(w)m(e)h
(can)f(use)h(it)e(also)g(with)h(an)g(algorithm)d(that)i(computes)-116
4493 y(the)33 b(successor)i(sets)e(during)f(the)h(detection)g(of)f(the)
h(strong)g(comp)s(onen)m(ts.)30 4655 y(Y)-8 b(et)48 b(another)g
(de\014ciency)h(in)e Fq(simple)p 1508 4655 V 39 w(tc)p
Fu(,)52 b(whic)m(h)c(is)g(also)e(presen)m(t)k(in)d(the)h(previous)h
(algorithms)-116 4789 y([36)o(,)40 b(40)o(,)g(64)o(],)i(is)d(that)g
Fq(simple)p 1075 4789 V 39 w(tc)g Fu(uses)i Fr(Suc)-5
b(c)o Fu(\()p Fs(v)t Fu(\))39 b(as)h(the)g(target)f(of)g(the)h(union)e
(op)s(eration)g(when)j(it)d(is)-116 4922 y(pro)s(cessing)e(the)h(edges)
h(lea)m(ving)d Fs(v)t Fu(.)54 b(A)37 b(b)s(etter)f(strategy)h(w)m(ould)
g(b)s(e)f(to)g(add)g(the)h(successor)i(set)e Fr(Suc)-5
b(c)p Fu(\()p Fs(w)s Fu(\))-116 5056 y(of)31 b(the)g(head)h(of)f(an)g
(edge)h(\()p Fs(v)t(;)17 b(w)s Fu(\))30 b(directly)g(in)m(to)h(the)h
(successor)h(set)f(of)f(the)h(ro)s(ot)e(of)h Fr(Comp)o
Fu(\()p Fs(v)t Fu(\),)g(but)g(this)g(is)-116 5190 y(not)e(p)s(ossible)g
(in)f(an)i(algorithm)c(lik)m(e)j Fq(simple)p 1598 5190
V 39 w(tc)p Fu(.)42 b(During)28 b(the)i(detection)f(of)g(a)h(comp)s
(onen)m(t)f Fs(C)7 b Fu(,)30 b(w)m(e)h(ha)m(v)m(e)-116
5323 y(no)i(single)f(lo)s(cation)e(asso)s(ciated)j(with)g
Fs(C)7 b Fu(,)33 b(where)h(w)m(e)g(could)f(insert)g(all)e(its)h
(successors.)48 b(F)-8 b(ortunately)g(,)32 b(w)m(e)-116
5457 y(can)37 b(do)h(b)s(etter)f(than)g(in)g Fq(simple)p
1173 5457 V 39 w(tc)g Fu(and)g(in)g(the)h(previous)f(algorithms)e(b)m
(y)j(using)f(only)g(some)g(partial)-116 5591 y(successor)29
b(sets)f(as)f(targets)g(of)f(unions.)42 b(W)-8 b(e)27
b(can)g(use)h(the)f(follo)m(wing)d(heuristic.)41 b(When)28
b(w)m(e)g(are)f(pro)s(cessing)-116 5724 y(an)36 b(edge)i(\()p
Fs(v)t(;)17 b(w)s Fu(\),)36 b(w)m(e)i(insert)f Fr(Suc)-5
b(c)p Fu(\()p Fs(w)s Fu(\))36 b(in)m(to)g Fr(Suc)-5 b(c)o
Fu(\()p Fr(R)g(o)g(ot)q Fu(\()p Fs(v)t Fu(\)\),)37 b(the)g(partial)e
(successor)k(set)e(of)g(the)g(curren)m(t)-116 5858 y(candidate)30
b(ro)s(ot)f(v)m(ertex.)45 b(This)30 b(reduces)i(the)f(n)m(um)m(b)s(er)f
(and)h(the)f(total)f(size)i(of)e(the)i(partial)d(successor)33
b(sets)p eop
56 21 bop -116 -294 a Fu(56)-116 18 y(that)32 b(are)h(targets)f(of)h
(insertions.)43 b(This)32 b(strategy)h(is)g(used)g(in)f(none)h(of)f
(the)h(previous)g(algorithms.)-116 415 y Ft(3.3)160 b(New)54
b(algorithm)g(CR)p 1605 415 49 4 v 58 w(TC)-116 662 y
Fu(W)-8 b(e)25 b(describ)s(e)g(no)m(w)g(a)f(new)i(transitiv)m(e)e
(closure)g(algorithm,)g(called)f Fq(cr)p 2477 662 34
4 v 39 w(tc)i Fu(and)f(presen)m(ted)j(in)d(Figure)31
b(3.14,)-116 796 y(that)25 b(uses)h(the)g(optimizations)c(describ)s(ed)
k(ab)s(o)m(v)m(e.)42 b Fq(cr)p 1910 796 V 40 w(tc)25
b Fu(scans)h(the)g(input)f(graph)g(only)f(once)i(and)g(builds)-116
929 y(the)39 b(successor)i(sets)e(from)f(strong)g(comp)s(onen)m(ts)h
(instead)g(of)f(v)m(ertices.)62 b(Lik)m(e)39 b Fq(simple)p
3170 929 V 39 w(tc)p Fu(,)h Fq(cr)p 3513 929 V 39 w(tc)e
Fu(uses)-116 1063 y(T)-8 b(arjan's)27 b(algorithm)d(to)j(detect)h(the)f
(strong)g(comp)s(onen)m(ts.)43 b(W)-8 b(e)27 b(could)g(ha)m(v)m(e)h
(based)g Fq(cr)p 3155 1063 V 40 w(tc)e Fu(on)h Fq(newscc)p
Fn(1)-116 1196 y Fu(equally)j(w)m(ell,)g(and)g(ev)m(en)i(on)f
Fq(newscc)p Fn(2)e Fu(if)h(w)m(e)h(only)f(w)m(an)m(ted)i(to)e(compute)g
(the)h(transitiv)m(e)f(closure)g(of)g(the)-116 1330 y(condensation)j
(graph.)30 1471 y(When)h(en)m(tering)f(a)g(v)m(ertex)i
Fs(v)t Fu(,)e Fq(cr)p 1307 1471 V 40 w(tc)g Fu(initializes)d
Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\))33 b(to)g(an)g(empt)m(y)h(set)g
(at)f(line)e(5.)46 b(During)31 b(the)-116 1604 y(detection)h(of)f(a)g
(strong)h(comp)s(onen)m(t,)f Fq(cr)p 1444 1604 V 40 w(tc)g
Fu(records)i(the)f(self-lo)s(op)d(edges)k(\()p Fs(v)t(;)17
b(v)t Fu(\))31 b(\(at)g(line)f(7\),)i(but)f(do)s(es)-116
1897 y Fp(\(1\))218 b Fo(pro)s(cedure)31 b Fn(cr)p 820
1897 31 4 v 36 w(tc)o Fp(\()p Fm(v)s Fp(\);)-116 2023
y(\(2\))218 b Fo(b)s(egin)-116 2148 y Fp(\(3\))385 b
Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b
Fm(v)s Fp(;)31 b Fl(Comp)q Fp(\()p Fm(v)s Fp(\))g(:=)61
b Fl(Nil)p Fp(;)-116 2273 y(\(4\))385 b Fn(push)o Fp(\()p
Fm(v)s(;)15 b Fl(stack)q Fp(\);)-116 2399 y(\(5\))385
b Fl(Suc)-5 b(c)p Fp(\()p Fm(v)s Fp(\))31 b(:=)f Fk(fg)p
Fp(;)i Fl(SelfL)-5 b(o)g(op)r Fp(\()p Fm(v)s Fp(\))31
b(:=)61 b Fo(false)p Fp(;)-116 2524 y(\(6\))385 b Fo(for)30
b(eac)m(h)h Fp(v)m(ertex)h Fm(w)g Fp(suc)m(h)e(that)h(\()p
Fm(v)s(;)15 b(w)r Fp(\))28 b Fk(2)c Fm(E)36 b Fo(do)31
b(b)s(egin)-116 2649 y Fp(\(7\))551 b Fo(if)31 b Fm(w)d
Fp(=)c Fm(v)34 b Fo(then)c Fl(SelfL)-5 b(o)g(op)r Fp(\()p
Fm(v)s Fp(\))32 b(:=)60 b Fo(true)-116 2775 y Fp(\(8\))551
b Fo(else)31 b(b)s(egin)-116 2900 y Fp(\(9\))718 b Fo(if)30
b Fm(w)j Fp(is)d(not)g(already)g(visited)f Fo(then)h
Fn(cr)p 2121 2900 V 36 w(tc)o Fp(\()p Fm(w)r Fp(\);)-116
3025 y(\(10\))673 b Fo(if)30 b Fl(Comp)r Fp(\()p Fm(w)r
Fp(\))c(=)f Fl(Nil)30 b Fo(then)g Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(v)s Fp(\))32 b(:=)60 b Fn(min)p Fp(\()p Fl(R)-5
b(o)g(ot)s Fp(\()p Fm(v)s Fp(\))p Fm(;)15 b Fl(R)-5 b(o)g(ot)s
Fp(\()p Fm(w)r Fp(\)\))-116 3151 y(\(11\))673 b Fo(else)31
b(if)f Fp(\()p Fm(v)s(;)15 b(w)r Fp(\))32 b(is)d(not)i(a)g(forw)m(ard)f
(edge)h(and)f Fl(Comp)q Fp(\()p Fm(w)r Fp(\))c Fk(62)f
Fl(Suc)-5 b(c)p Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p Fm(v)s
Fp(\)\))31 b Fo(then)-116 3276 y Fp(\(12\))840 b Fl(Suc)-5
b(c)p Fp(\()p Fl(R)g(o)g(ot)r Fp(\()p Fm(v)s Fp(\)\))32
b(:=)e Fl(Suc)-5 b(c)p Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p
Fm(v)s Fp(\)\))21 b Fk([)f(f)p Fl(Comp)r Fp(\()p Fm(w)r
Fp(\))p Fk(g)i([)d Fl(Suc)-5 b(c)p Fp(\()p Fl(Comp)r
Fp(\()p Fm(w)r Fp(\)\);)-116 3401 y(\(13\))506 b Fo(end)-116
3527 y Fp(\(14\))340 b Fo(end)p Fp(;)-116 3652 y(\(15\))g
Fo(if)30 b Fl(R)-5 b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))26
b(=)f Fm(v)34 b Fo(then)c(b)s(egin)-116 3777 y Fp(\(16\))506
b(create)32 b(a)f(new)f(comp)s(onen)m(t)h Fm(C)7 b Fp(;)-116
3903 y(\(17\))506 b Fo(if)31 b Fn(top)o Fp(\()p Fl(stack)q
Fp(\))25 b Fk(6)p Fp(=)g Fm(v)34 b Fo(or)d Fl(SelfL)-5
b(o)g(op)r Fp(\()p Fm(v)s Fp(\))31 b Fo(then)f Fl(Suc)-5
b(c)p Fp(\()p Fm(C)7 b Fp(\))31 b(:=)f Fl(Suc)-5 b(c)p
Fp(\()p Fm(v)s Fp(\))21 b Fk([)f(f)p Fm(C)7 b Fk(g)-116
4028 y Fp(\(18\))506 b Fo(else)31 b Fl(Suc)-5 b(c)p Fp(\()p
Fm(C)7 b Fp(\))30 b(:=)g Fl(Suc)-5 b(c)p Fp(\()p Fm(v)s
Fp(\);)-116 4153 y(\(19\))506 b Fo(rep)s(eat)-116 4279
y Fp(\(20\))673 b Fm(w)33 b Fp(:=)61 b Fn(pop)o Fp(\()p
Fl(stack)q Fp(\);)-116 4404 y(\(21\))673 b Fl(Comp)q
Fp(\()p Fm(w)r Fp(\))32 b(:=)61 b Fm(C)7 b Fp(;)-116
4529 y(\(22\))673 b(insert)29 b Fm(w)k Fp(in)m(to)e(comp)s(onen)m(t)f
Fm(C)7 b Fp(;)-116 4655 y(\(23\))673 b Fo(if)30 b Fm(w)e
Fk(6)p Fp(=)d Fm(v)34 b Fo(and)c Fl(Suc)-5 b(c)p Fp(\()p
Fm(w)r Fp(\))26 b Fk(6)p Fp(=)f Fk(;)31 b Fo(then)f Fl(Suc)-5
b(c)p Fp(\()p Fm(C)7 b Fp(\))31 b(:=)f Fl(Suc)-5 b(c)p
Fp(\()p Fm(C)7 b Fp(\))20 b Fk([)g Fl(Suc)-5 b(c)p Fp(\()p
Fm(w)r Fp(\);)-116 4780 y(\(24\))506 b Fo(un)m(til)31
b Fm(w)d Fp(=)c Fm(v)-116 4905 y Fp(\(25\))340 b Fo(end)-116
5031 y Fp(\(26\))173 b Fo(end)p Fp(;)-116 5156 y(\(27\))g
Fo(b)s(egin)31 b Fp(/*)g(Main)f(program)g(*/)-116 5281
y(\(28\))340 b Fl(stack)61 b Fp(:=)f Fk(;)p Fp(;)-116
5407 y(\(29\))340 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h
Fm(v)c Fk(2)d Fm(V)51 b Fo(do)-116 5532 y Fp(\(30\))506
b Fo(if)31 b Fm(v)i Fp(is)d(not)g(already)g(visited)f
Fo(then)h Fn(cr)p 1934 5532 V 36 w(tc)o Fp(\()p Fm(v)s
Fp(\))-116 5657 y(\(31\))173 b Fo(end)p Fp(.)95 5838
y Fq(Figure)38 b(3.14)p Fu(:)43 b(Algorithm)30 b Fq(cr)p
1337 5838 34 4 v 39 w(tc)p Fu(,)j(the)g(\\candidate)f(ro)s(ot")f
(transitiv)m(e)i(closure)f(algorithm.)p eop
57 22 bop 3778 -294 a Fu(57)-116 18 y(not)40 b(use)h(other)f(in)m
(tracomp)s(onen)m(t)f(edges)j(for)d(successor)k(set)d(generation.)66
b(Only)39 b(in)m(tercomp)s(onen)m(t)h(tree)-116 152 y(and)e(cross)g
(edges)h(are)f(used)h(for)e(this)g(purp)s(ose.)60 b(When)39
b(pro)s(cessing)f(an)g(edge)g(\()p Fs(v)t(;)17 b(w)s
Fu(\),)38 b Fq(cr)p 3322 152 34 4 v 39 w(tc)g Fu(do)s(es)g(not)-116
286 y(automatically)29 b(add)k Fr(Suc)-5 b(c)p Fu(\()p
Fs(w)s Fu(\))32 b(in)m(to)g Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t
Fu(\))32 b(as)h Fq(simple)p 2051 286 V 39 w(tc)f Fu(do)s(es.)45
b(Instead,)34 b Fq(cr)p 2990 286 V 39 w(tc)f Fu(c)m(hec)m(ks)i(at)e
(line)e(11)-116 419 y(that)41 b(\()p Fs(v)t(;)17 b(w)s
Fu(\))41 b(is)g(not)g(a)h(forw)m(ard)g(edge,)i(i.e.,)g(it)d(is)g(an)h
(in)m(tercomp)s(onen)m(t)f(tree)h(or)g(cross)h(edge,)h(and)e(that)-116
553 y Fr(Comp)o Fu(\()p Fs(w)s Fu(\),)33 b(the)i(comp)s(onen)m(t)f(con)
m(taining)e Fs(w)s Fu(,)i(is)f(not)h(already)g(in)f Fr(Suc)-5
b(c)p Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t Fu(\)\),)33
b(the)i(partial)c(successor)-116 686 y(set)g(of)f(the)g(curren)m(t)i
(candidate)e(ro)s(ot)g(v)m(ertex)i(of)e Fs(v)t Fu(.)42
b(If)30 b(these)i(tests)f(are)g(satis\014ed,)g Fq(cr)p
3072 686 V 40 w(tc)f Fu(adds)h Fr(Comp)o Fu(\()p Fs(w)s
Fu(\))-116 820 y(and)j Fr(Suc)-5 b(c)p Fu(\()p Fr(Comp)o
Fu(\()p Fs(w)s Fu(\)\))34 b(in)m(to)g Fr(Suc)-5 b(c)p
Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t Fu(\)\))34 b(at)g(line)f(12.)49
b(The)36 b(use)g(of)e Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t
Fu(\))34 b(instead)h(of)f Fs(v)k Fu(here)d(giv)m(es)-116
954 y(the)25 b(algorithm)d(the)k(name)e(\\candidate)h(ro)s(ot)f
(transitiv)m(e)h(closure)g(algorithm,")e Fq(cr)p 2966
954 V 40 w(tc)o Fu(,)k(for)e(short.)41 b(V)-8 b(ertex)-116
1087 y Fs(v)38 b Fu(can)c(b)s(e)h(seen)g(as)g(a)f(mediator)e(b)s(et)m
(w)m(een)37 b(the)e(comp)s(onen)m(t)f Fr(Comp)o Fu(\()p
Fs(w)s Fu(\))f(and)i(the)g(candidate)f(ro)s(ot)f(v)m(ertex)-116
1221 y Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\).)47 b(Note)33
b(that)h(since)g Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(v)t Fu(\))34
b(is)f(up)s(dated)h(during)f(the)h(pro)s(cessing)g(of)g(the)g(edges)h
(lea)m(ving)e Fs(v)t Fu(,)g(the)-116 1355 y(successor)38
b(sets)g(of)d(di\013eren)m(t)i(v)m(ertices)g(adjacen)m(t)g(from)e
Fs(v)40 b Fu(ma)m(y)c(b)s(e)g(inserted)h(in)m(to)e(the)i(partial)c
(successor)-116 1488 y(sets)39 b(of)e(di\013eren)m(t)g(candidate)h(ro)s
(ot)f(v)m(ertices.)59 b(When)39 b Fs(C)44 b Fu(is)38
b(detected,)i Fq(cr)p 2711 1488 V 40 w(tc)d Fu(inserts)h
Fs(C)44 b Fu(in)m(to)37 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7
b Fu(\))-116 1622 y(\(at)42 b(line)g(17\))g(if)f Fs(C)50
b Fu(con)m(tains)43 b(more)f(than)g(one)h(v)m(ertex)i(or)d(if)g
Fq(cr)p 2377 1622 V 39 w(tc)h Fu(has)g(detected)h(a)f(self-lo)s(op)d
(\()p Fs(r)m(;)17 b(r)s Fu(\).)-116 1755 y(Ob)m(viously)-8
b(,)49 b Fs(C)k Fu(con)m(tains)46 b(more)f(than)h(one)g(v)m(ertex)h
(i\013)e(the)i(topmost)e(v)m(ertex)i(on)f(the)h(v)m(ertex)g(stac)m(k)g
(is)-116 1889 y(di\013eren)m(t)40 b(from)g(the)g(ro)s(ot)g(v)m(ertex)i
Fs(r)s Fu(.)67 b(T)-8 b(o)40 b(get)h(the)g(full)d(successor)43
b(set,)g Fq(cr)p 2769 1889 V 40 w(tc)d Fu(unions)g(the)h(nonempt)m(y)
-116 2023 y(partial)30 b(successor)35 b(sets)f(of)e(the)h(comp)s(onen)m
(t)f(mem)m(b)s(ers)h(at)f(line)f(23.)30 2162 y(The)j(strategy)g(used)g
(in)e Fq(cr)p 1072 2162 V 39 w(tc)h Fu(usually)f(decreases)j(the)f(n)m
(um)m(b)s(er)f(and)g(the)h(total)d(size)i(of)g(the)g(partial)-116
2296 y(successor)40 b(sets)f(compared)e(to)h Fq(simple)p
1398 2296 V 39 w(tc)o Fu(.)59 b(Decreasing)38 b(the)g(n)m(um)m(b)s(er)g
(of)f(di\013eren)m(t)h(partial)d(successor)-116 2429
y(sets)h(increases)g(the)g(probabilit)m(y)d(that)i(comp)s(onen)m(t)g
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))g(and)g Fr(Suc)-5 b(c)p
Fu(\()p Fr(Comp)o Fu(\()p Fs(w)s Fu(\)\))34 b(are)h(already)g(in)f(a)
-116 2563 y(partial)g(successor)39 b(set)e Fs(S)43 b
Fu(where)38 b(w)m(e)f(try)g(to)g(add)f(them,)i(in)e(whic)m(h)h(case)g
(w)m(e)h(can)f(omit)d(inserting)i(them)-116 2696 y(again.)-116
2941 y Fj(Example)f(3.7.)c Fu(Consider)h(again)e(the)i(graph)f
Fs(G)p Fu(,)h(no)m(w)g(presen)m(ted)h(in)e(Figure)g(3.15.)43
b(If)31 b(w)m(e)i(apply)e Fq(cr)p 3726 2941 V 39 w(tc)-116
3075 y Fu(to)38 b Fs(G)h Fu(starting)f(at)g(v)m(ertex)j
Fs(a)p Fu(,)f(and)f(the)g(adjacency)i(lists)c(are)i(the)g(same)g(as)g
(in)f(our)h(previous)g(examples)-116 3208 y(\(see)h(Figure)31
b(3.10\(a\))o(\),)41 b(w)m(e)f(get)e(four)h(non-empt)m(y)g(partial)e
(successor)k(sets)f(and)f(their)f(total)f(size)i(is)g(six.)-116
3342 y(T)-8 b(o)41 b(create)g(these)h(sets,)i Fq(cr)p
943 3342 V 40 w(tc)c Fu(needs)j(sev)m(en)f(union)f(op)s(erations.)67
b(Fiv)m(e)40 b(of)h(these)h(unions)e(are)h(needed)-116
3476 y(to)34 b(propagate)h(successor)i(sets)f(via)f(the)g(in)m(tercomp)
s(onen)m(t)g(edges)h(that)f(are)g(dra)m(wn)g(solid)f(in)g(Figure)d
(3.15)-116 3609 y(and)38 b(t)m(w)m(o)i(are)e(needed)i(to)e(com)m(bine)g
(the)h(partial)d(successor)41 b(sets)f(of)e(nonro)s(ot)g(v)m(ertices.)
62 b(Compare)38 b(this)-116 3743 y(to)43 b(Example)g(3.4)h(where)h(w)m
(e)g(applied)d Fq(simple)p 1719 3743 V 39 w(tc)i Fu(to)f
Fs(G)p Fu(.)77 b(There)45 b(w)m(e)g(had)f(nine)f(non-empt)m(y)h
(partial)-116 3877 y(successor)33 b(sets,)g(the)e(total)f(size)h(of)f
(the)i(sets)g(w)m(as)g(62,)f(and)g Fq(simple)p 2414 3877
V 39 w(tc)g Fu(needed)h(17)f(union)f(op)s(erations)g(to)-116
4010 y(compute)i(them.)-116 4199 y(The)42 b(n)m(um)m(b)s(er)g(of)f
(non-empt)m(y)h(partial)d(successor)44 b(sets)e(that)g
Fq(cr)p 2371 4199 V 39 w(tc)f Fu(creates,)k(the)d(total)e(size)i(of)f
(these)-116 4333 y(sets,)f(and)d(the)h(n)m(um)m(b)s(er)g(of)f(union)g
(op)s(erations)g(needed)i(dep)s(end)f(on)g(the)g(order)f(in)g(whic)m(h)
h(the)g(graph)f(is)-116 4467 y(tra)m(v)m(ersed.)66 b(F)-8
b(or)39 b(instance,)j(if)c(w)m(e)j(c)m(hange)g(the)f(order)f(of)h(v)m
(ertices)g(in)f(the)h(adjacency)h(lists)e(of)g(v)m(ertex)i
Fs(b)-116 4600 y Fu(and)31 b Fs(c)g Fu(to)g(\()p Fs(a;)17
b(c)p Fu(\))31 b(and)h(\()p Fs(b;)17 b(d)p Fu(\),)31
b(resp)s(ectiv)m(ely)-8 b(,)32 b(the)g(n)m(um)m(b)s(er)g(of)f(non-empt)
m(y)g(partial)e(successor)34 b(sets)e(and)f(the)-116
4734 y(total)g(size)i(of)f(the)h(sets)g(b)s(oth)g(decrease)h(b)m(y)g
(one.)p 1739 4734 4 67 v 1743 4671 59 4 v 1743 4734 V
1801 4734 4 67 v -116 5084 a Fj(Theorem)d(3.13.)d Fu(Algorithm)d
Fq(cr)p 1201 5084 34 4 v 39 w(tc)p Fu(,)k(presen)m(ted)g(in)e(Figure)32
b(3.14)o(,)d(correctly)e(computes)h(the)g(transitiv)m(e)-116
5218 y(closure)k(of)h(the)g(input)f(graph)g Fs(G)p Fu(.)-116
5457 y Fj(Pro)s(of.)79 b Fu(The)33 b(strong)f(comp)s(onen)m(ts)h(are)f
(detected)h(as)f(in)f(T)-8 b(arjan's)33 b(algorithm.)40
b(W)-8 b(e)32 b(ha)m(v)m(e)h(to)f(sho)m(w)h(that)-116
5591 y(the)40 b(successor)j(sets)e(are)f(correctly)g(computed.)67
b(W)-8 b(e)40 b(sho)m(w)h(that)f(after)g(the)h(execution)f(of)g
Fq(cr)p 3521 5591 V 40 w(tc)o Fu(,)i(the)-116 5724 y(successor)h(set)e
Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))40 b(of)g(a)h(comp)s(onen)m(t)f
Fs(C)48 b Fu(con)m(tains)40 b(a)h(comp)s(onen)m(t)f Fs(X)48
b Fu(i\013)40 b Fs(G)g Fu(con)m(tains)h(a)f(non-n)m(ull)-116
5858 y(path)32 b Fs(v)184 5805 y Fi(+)162 5858 y Fh(!)p
Fs(w)j Fu(suc)m(h)f(that)e(v)m(ertex)i Fs(v)j Fu(is)32
b(in)g Fs(C)39 b Fu(and)33 b(v)m(ertex)h Fs(w)h Fu(is)d(in)g
Fs(X)8 b Fu(.)p eop
58 23 bop -116 -294 a Fu(58)510 2082 y @beginspecial
0 @llx 0 @lly 494 @urx 390 @ury 3288 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/id1 <67>def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 22 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/id2 <64>def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {/id1 /id2 /attrs 3 BindPars id1 <63>eq id2 <64>eq and id1 <61>eq id2 <66>eq and or id1 <67>eq id2 <64>eq and or id1 <69>eq id2 <65>eq and or id1 <69>eq id2 <6a>eq and or {id1 id2 attrs RealEdge }{id1 id2 attrs length 1 add array dup 1 attrs putinterval dup 0 mark /setdash mark 3.0 ] 0.0 ] put RealEdge }ifelse }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -67 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/RealEdge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/loc 3 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -267 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Simple def 
/attrs []bind def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-67 -267 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Simple  InitGraph
(e) 300 300 null Vertex
(g) 300 400 null Vertex
(i) 400 400 null Vertex
(b) 200 500 null Vertex
(d) 200 300 null Vertex
(f) 300 500 null Vertex
(h) 400 500 null Vertex
(j) 400 300 null Vertex
(a) 300 600 null Vertex
(c) 200 400 null Vertex
(a) (f) [] Edge
(g) (f) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(h) (i) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(a) (b) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(i) (j) [] Edge
(b) (c) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(i) (e) [] Edge
(c) (d) [] Edge
(e) (d) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(f) (g) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(a) (h) [[/setdash [3.0 ]0.0 ]] Edge
(i) (h) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(b) (a) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(i) (c) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ][/deviation 0.2 ][/startangle 30 ]] Edge
(c) (b) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
(g) (d) [] Edge
(d) (e) [[/setdash [3.0 ]0.0 ][/edgetype /leftedge ]] Edge
[[443 490 561 508 ]{gsave 443 497 moveto DataFont setfont <53756363286829203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -1 -6 rmoveto <33>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[135 267 433 633 ]{gsave mark 2.0 4.0 ] 0.0 setdash mark <61><68><69><68><61><62><63><62>] ClosedPolyLine 147 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <34>show mark <66><67>] ClosedPolyLine 247 450 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <32>show mark <64><65>] ClosedPolyLine 147 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <31>show mark <6a>] ClosedPolyLine 347 300 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <33>show grestore }] Graphics
[[67 390 171 408 ]{gsave 67 397 moveto DataFont setfont <53756363286329203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[397 566 489 584 ]{gsave 397 573 moveto DataFont setfont <53756363286629203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[243 638 360 657 ]{gsave 243 645 moveto DataFont setfont <53756363286129203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
$GraphsEnd
 @endspecial -116 2273 a Fq(Figure)37 b(3.15)p Fu(:)43
b(Graph)33 b Fs(G)f Fu(and)h(the)g(non-empt)m(y)f(partial)f(successor)j
(sets)g(of)e(the)h(v)m(ertices)h(when)g Fq(cr)p 3726
2273 34 4 v 39 w(tc)-116 2382 y Fu(is)e(applied)f(to)i
Fs(G)p Fu(.)-116 2682 y(W)-8 b(e)26 b(can)g(pro)m(v)m(e)h(the)f
(only-if)d(part)i(b)m(y)i(sho)m(wing)f(that)f(the)h(follo)m(wing)d(in)m
(v)-5 b(arian)m(t)24 b(holds)i(after)f(an)m(y)h(n)m(um)m(b)s(er)g(of)
-116 2815 y(union)32 b(op)s(erations)g(in)g Fq(cr)p 870
2815 V 40 w(tc)p Fu(:)44 b(a)32 b(successor)k(set)d Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\))33 b(or)f(a)h(partial)d(successor)36
b(set)d Fr(Suc)-5 b(c)p Fu(\()p Fs(u)p Fu(\),)32 b Fs(u)c
Fh(2)h Fs(C)7 b Fu(,)-116 2949 y(con)m(tains)35 b(comp)s(onen)m(t)g
Fs(X)43 b Fu(only)35 b(if)f Fs(G)i Fu(con)m(tains)f(a)g(non-n)m(ull)f
(path)h Fs(v)2473 2896 y Fi(+)2451 2949 y Fh(!)o Fs(w)j
Fu(suc)m(h)f(that)e Fs(v)k Fu(is)c(in)f Fs(C)42 b Fu(and)36
b Fs(w)h Fu(is)-116 3082 y(in)32 b Fs(X)8 b Fu(.)-116
3276 y(W)-8 b(e)33 b(pro)m(v)m(e)h(the)f(if)e(part)h(b)m(y)i(induction)
d(on)i(the)g(lev)m(el)f(of)g(comp)s(onen)m(t.)-106 3530
y Fj(\(i\))84 b Fu(Let)45 b Fs(C)56 b Fu(=)48 b Fh(f)p
Fs(r)s Fh(g)d Fu(b)s(e)g(a)f(trivial)f(comp)s(onen)m(t)i(at)f(lev)m(el)
h(zero.)80 b(A)m(t)46 b(line)d(5)i Fq(cr)p 2995 3530
V 39 w(tc)g Fu(assigns)g Fj(false)g Fu(to)98 3663 y Fr(SelfL)-5
b(o)g(op)o Fu(\()p Fs(v)t Fu(\).)67 b(If)40 b Fs(G)h
Fu(con)m(tains)f(an)g(edge)h(\()p Fs(r)m(;)17 b(r)s Fu(\),)42
b Fq(cr)p 2063 3663 V 40 w(tc)e Fu(assigns)h Fj(true)f
Fu(to)g Fr(SelfL)-5 b(o)g(op)o Fu(\()p Fs(v)t Fu(\))40
b(at)g(line)f(7.)98 3797 y(Since)31 b(no)f(edge)h(lea)m(v)m(es)g(comp)s
(onen)m(t)g Fs(C)7 b Fu(,)30 b Fr(Suc)-5 b(c)p Fu(\()p
Fs(r)s Fu(\))30 b(is)g(empt)m(y)h(when)g Fq(cr)p 2727
3797 V 40 w(tc)f Fu(has)g(pro)s(cessed)j(all)28 b(edges)98
3931 y(lea)m(ving)h Fs(r)s Fu(.)42 b(When)30 b(comp)s(onen)m(t)g
Fs(C)37 b Fu(is)29 b(detected,)i(the)f(topmost)f(elemen)m(t)h(of)f(the)
h(stac)m(k)h(is)e Fs(r)s Fu(,)h(and)f(the)98 4064 y(test)k
Fq(top)o Fu(\()p Fr(stack)p Fu(\))28 b Fh(6)p Fu(=)f
Fs(v)36 b Fu(at)31 b(line)f(17)h(fails.)42 b(Th)m(us,)33
b Fq(cr)p 2038 4064 V 40 w(tc)e Fu(correctly)h(assigns)g
Fh(f)p Fs(C)7 b Fh(g)31 b Fu(to)h Fr(Suc)-5 b(c)o Fu(\()p
Fs(C)7 b Fu(\))32 b(if)e(the)98 4198 y(input)39 b(graph)h(con)m(tains)f
(a)h(self-lo)s(op)d(\()p Fs(r)m(;)17 b(r)s Fu(\))39 b(and)h(otherwise)g
(assigns)g Fh(;)f Fu(to)g Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7
b Fu(\).)64 b(Let)40 b Fs(C)46 b Fu(b)s(e)40 b(a)98 4332
y(non)m(trivial)29 b(comp)s(onen)m(t)h(at)h(lev)m(el)f(zero.)43
b(Since)31 b(no)g(edge)g(lea)m(v)m(es)h(comp)s(onen)m(t)e
Fs(C)7 b Fu(,)32 b(the)f(successor)i(sets)98 4465 y(of)h(the)g(mem)m(b)
s(ers)g(of)f Fs(C)41 b Fu(are)33 b(empt)m(y)i(when)g
Fq(cr)p 1862 4465 V 39 w(tc)f Fu(has)g(detected)i Fs(C)7
b Fu(.)47 b(Since)34 b Fs(C)40 b Fu(is)34 b(non-empt)m(y)g(and)98
4599 y(since)g Fq(cr)p 464 4599 V 40 w(tc)f Fu(en)m(tered)i(the)g(ro)s
(ot)d Fs(r)37 b Fu(of)c Fs(C)40 b Fu(b)s(efore)34 b(the)g(other)g(v)m
(ertices)h(of)e Fs(C)7 b Fu(,)34 b(the)g(topmost)f(elemen)m(t)98
4732 y(of)f(the)h(stac)m(k)h(is)e(not)h Fs(r)s Fu(.)43
b(Th)m(us,)34 b Fq(cr)p 1416 4732 V 40 w(tc)e Fu(correctly)h(assigns)f
Fh(f)p Fs(C)7 b Fh(g)33 b Fu(to)f Fr(Suc)-5 b(c)p Fu(\()p
Fs(C)7 b Fu(\))32 b(at)g(line)f(17.)-137 4922 y Fj(\(ii\))83
b Fu(Let)40 b Fs(C)47 b Fu(b)s(e)40 b(a)g(comp)s(onen)m(t)g(at)f(lev)m
(el)g Fs(l)k(>)d Fu(0.)65 b(The)41 b(correct)f(insertion)f(of)g
Fs(C)47 b Fu(in)m(to)39 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7
b Fu(\))40 b(can)g(b)s(e)98 5056 y(sho)m(wn)46 b(as)e(in)f(the)h
(induction)f(basis.)78 b(W)-8 b(e)44 b(sho)m(w)i(that)d
Fq(cr)p 2379 5056 V 40 w(tc)h Fu(correctly)g(inserts)g(the)g(successor)
98 5190 y(comp)s(onen)m(ts)d(other)f(than)h Fs(C)47 b
Fu(in)m(to)39 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)67
b(Since)40 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))40
b(is)g(constructed)h(b)m(y)h(unioning)c(the)98 5323 y(non-empt)m(y)h
(partial)d(successor)41 b(sets)f(of)e(the)g(v)m(ertices)i(of)e
Fs(C)7 b Fu(,)40 b(w)m(e)f(sho)m(w)h(that)e Fq(cr)p 3184
5323 V 40 w(tc)g Fu(inserts)h(eac)m(h)98 5457 y(successor)46
b(comp)s(onen)m(t)d(other)h(than)f Fs(C)50 b Fu(in)m(to)43
b(the)h(partial)d(successor)46 b(set)e(of)f(some)g(v)m(ertex)i(of)e
Fs(C)7 b Fu(.)98 5591 y(Eac)m(h)31 b(successor)i(comp)s(onen)m(t)d
(that)f(is)h(not)g(an)g(immediate)d(successor)32 b(of)e
Fs(C)37 b Fu(is)29 b(a)h(successor)i(of)e(some)98 5724
y(immediate)c(successor)k(of)e Fs(C)7 b Fu(.)42 b(Eac)m(h)29
b(immediate)d(successor)k(comp)s(onen)m(t)e(of)g Fs(C)35
b Fu(is)28 b(at)g(a)g(lev)m(el)g(b)s(elo)m(w)g Fs(l)98
5858 y Fu(and,)k(b)m(y)h(the)f(induction)f(h)m(yp)s(othesis,)i(has)f
(its)f(successor)j(set)e(correctly)g(constructed.)45
b(Hence)33 b(eac)m(h)p eop
59 24 bop 3778 -294 a Fu(59)98 18 y(successor)42 b(comp)s(onen)m(t)d
(of)f Fs(C)46 b Fu(that)39 b(is)f(not)h(an)g(immediate)d(successor)41
b(is)e(in)f(the)h(successor)j(set)d(of)98 152 y(some)26
b(immediate)d(successor)28 b(of)d Fs(C)7 b Fu(.)42 b(It)25
b(su\016ces)j(to)e(sho)m(w)h(that)e(all)f(immediate)f(successors)28
b(and)e(their)98 286 y(successor)k(sets)f(are)f(correctly)g(added)g(in)
m(to)f(the)h(partial)e(successor)k(set)e(of)f(some)h(v)m(ertex)i
Fs(v)h Fu(in)c Fs(C)7 b Fu(.)42 b(Let)98 419 y Fs(X)d
Fu(b)s(e)31 b(an)f(immediate)f(successor)k(of)d Fs(C)38
b Fu(and)31 b(let)f(\()p Fs(v)t(;)17 b(w)s Fu(\))29 b(b)s(e)i(an)g
(edge)g(leading)f(from)f Fs(C)38 b Fu(to)30 b Fs(X)8
b Fu(.)43 b(When)98 553 y Fq(cr)p 224 553 34 4 v 40 w(tc)34
b Fu(is)g(pro)s(cessing)h(edge)g(\()p Fs(v)t(;)17 b(w)s
Fu(\),)33 b(it)h(is)g(either)g(a)g(tree)h(edge,)h(a)e(cross)i(edge,)f
(or)f(a)h(forw)m(ard)f(edge.)98 686 y(If)39 b(\()p Fs(v)t(;)17
b(w)s Fu(\))37 b(is)h(a)g(tree)h(edge)g(or)g(a)f(cross)h(edge,)i
Fq(cr)p 1944 686 V 40 w(tc)d Fu(adds)h Fs(X)46 b Fu(and)39
b Fr(Suc)-5 b(c)p Fu(\()p Fs(X)8 b Fu(\))38 b(in)m(to)g
Fr(Suc)-5 b(c)o Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t
Fu(\)\))98 820 y(at)39 b(line)e(12.)62 b Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(v)t Fu(\))39 b(is)f(in)g Fs(C)7 b Fu(,)41
b(and)e(w)m(e)g(are)g(done.)63 b(If)39 b(\()p Fs(v)t(;)17
b(w)s Fu(\))38 b(is)g(a)h(forw)m(ard)f(edge,)k(a)c(path)h
Fs(v)3726 767 y Fi(+)3704 820 y Fh(!)o Fs(w)98 954 y
Fu(consisting)28 b(solely)f(of)g(tree)i(edges)g(exists.)43
b(This)28 b(path)g(can)g(b)s(e)g(split)f(in)m(to)g(three)i(parts:)41
b(a)28 b(path)g Fs(v)3730 901 y Ff(\003)3698 954 y Fh(!)p
Fs(a)p Fu(,)98 1087 y(an)42 b(edge)h(\()p Fs(a;)17 b(b)p
Fu(\),)44 b(and)e(a)g(path)g Fs(b)1359 1034 y Ff(\003)1326
1087 y Fh(!)p Fs(u)p Fu(,)i(where)f Fs(a)f Fu(is)f(in)h
Fs(C)48 b Fu(and)43 b Fs(b)f Fu(is)f(in)g(a)h(comp)s(onen)m(t)g
Fs(Y)63 b Fu(adjacen)m(t)98 1221 y(from)30 b Fs(C)7 b
Fu(.)42 b(If)31 b Fs(Y)49 b Fu(=)27 b Fs(X)8 b Fu(,)31
b Fq(cr)p 1051 1221 V 39 w(tc)g Fu(adds)g Fs(X)38 b Fu(and)31
b Fr(Suc)-5 b(c)p Fu(\()p Fs(X)8 b Fu(\))30 b(in)m(to)f
Fr(Suc)-5 b(c)p Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(a)p
Fu(\)\))31 b(when)g(pro)s(cessing)g(edge)98 1355 y(\()p
Fs(a;)17 b(b)p Fu(\).)43 b Fr(R)-5 b(o)g(ot)p Fu(\()p
Fs(a)p Fu(\))29 b(is)f(in)h Fs(C)7 b Fu(,)29 b(and)g(w)m(e)h(are)f
(done.)43 b(If)29 b Fs(Y)49 b Fh(6)p Fu(=)28 b Fs(X)8
b Fu(,)29 b(then)h Fs(X)37 b Fu(is)28 b(a)h(successor)i(comp)s(onen)m
(t)e(of)g Fs(Y)98 1488 y Fu(and)34 b(b)m(y)h(the)f(induction)f(h)m(yp)s
(othesis)i(has)f(correctly)g(b)s(een)h(inserted)f(in)m(to)g
Fr(Suc)-5 b(c)o Fu(\()p Fs(Y)22 b Fu(\).)47 b(When)35
b Fq(cr)p 3726 1488 V 39 w(tc)98 1622 y Fu(pro)s(cesses)j(edge)f(\()p
Fs(a;)17 b(b)p Fu(\),)38 b(it)d(adds)h Fr(Suc)-5 b(c)p
Fu(\()p Fs(Y)21 b Fu(\))36 b(that)g(con)m(tains)g Fs(X)44
b Fu(in)m(to)36 b Fr(Suc)-5 b(c)o Fu(\()p Fr(R)g(o)g(ot)q
Fu(\()p Fs(a)p Fu(\)\).)54 b Fr(R)-5 b(o)g(ot)p Fu(\()p
Fs(a)p Fu(\))36 b(is)g(in)98 1755 y Fs(C)7 b Fu(,)33
b(and)f(w)m(e)i(are)f(done.)p 1002 1755 4 67 v 1006 1692
59 4 v 1006 1755 V 1063 1755 4 67 v 30 1962 a(If)c(w)m(e)i(express)h
(the)d(w)m(orst-case)i(execution)f(times)f(of)g Fq(simple)p
2352 1962 34 4 v 39 w(tc)g Fu(and)g Fq(cr)p 2843 1962
V 40 w(tc)g Fu(using)g Fs(n)h Fu(and)f Fs(e)h Fu(as)f(the)-116
2095 y(only)g(parameters,)h(w)m(e)g(get)g(the)g(same)f(w)m(orst-case)i
(b)s(ound,)f(namely)f Fs(O)s Fu(\()p Fs(ne)p Fu(\).)42
b(Ho)m(w)m(ev)m(er,)32 b(as)e(our)f(examples)-116 2229
y(ha)m(v)m(e)38 b(sho)m(wn,)i Fq(cr)p 568 2229 V 40 w(tc)d
Fu(is)g(more)f(e\016cien)m(t)i(in)f(some)g(situations.)57
b(T)-8 b(o)37 b(mak)m(e)g(the)h(di\013erence)g(b)s(et)m(w)m(een)h(the)
-116 2363 y(execution)26 b(times)e(of)h Fq(simple)p 990
2363 V 39 w(tc)h Fu(and)f Fq(cr)p 1474 2363 V 40 w(tc)g
Fu(explicit,)g(w)m(e)i(ha)m(v)m(e)g(to)e(use)h(more)f(\014ne-grained)g
(parameters)-116 2496 y(than)33 b Fs(n)g Fu(and)g Fs(e)p
Fu(.)45 b(W)-8 b(e)34 b(in)m(tro)s(duce)f(parameters)g(that)g(represen)
m(t)i(the)e(sizes)h(of)e(some)h(subsets)i(of)e Fs(V)21
b Fu(,)34 b(the)f(set)-116 2630 y(of)f(v)m(ertices,)h(and)g
Fs(E)6 b Fu(,)32 b(the)h(set)g(of)f(edges.)45 b(W)-8
b(e)32 b(express)j(the)e(w)m(orst-case)h(execution)f(time)e(of)h
Fq(cr)p 3471 2630 V 39 w(tc)g Fu(using)-116 2763 y(these)i(parameters)e
(and)h(sho)m(w)h(that)e Fq(cr)p 1407 2763 V 39 w(tc)h
Fu(has)g(a)f(b)s(etter)h(w)m(orst-case)h(b)s(ound)f(than)f
Fq(simple)p 3453 2763 V 39 w(tc)p Fu(.)-116 2949 y Fj(Theorem)48
b(3.14.)42 b Fu(Algorithm)d Fq(cr)p 1246 2949 V 40 w(tc)i
Fu(runs)i(in)e Fs(O)s Fu(\()p Fs(nZ)7 b Fu(\()p Fs(n)p
Fu(\))28 b(+)h Fs(e)2348 2964 y Fe(oct)2442 2949 y Fs(F)14
b Fu(\()p Fs(n)p Fu(\))28 b(+)h(\()p Fs(e)2869 2964 y
Fe(oct)p Fi(1)3027 2949 y Fu(+)g Fs(s)3178 2964 y Fe(cy)r(c)3280
2949 y Fu(\))p Fs(I)8 b Fu(\()p Fs(n)p Fu(\))28 b(+)h(\()p
Fs(n)3732 2964 y Fi(1)3800 2949 y Fu(+)-116 3082 y Fs(e)-71
3097 y Fe(oct)p Fi(1)59 3082 y Fu(\))p Fs(U)10 b Fu(\()p
Fs(n)p Fu(\)\))36 b(time)f(in)h(the)h(w)m(orst)g(case.)55
b(Here)38 b Fs(e)1699 3097 y Fe(oct)1829 3082 y Fu(is)e(the)h(n)m(um)m
(b)s(er)g(of)e(in)m(tercomp)s(onen)m(t)i(tree)f(and)h(cross)-116
3216 y(edges)29 b(in)f(the)g(input)g(graph,)h(and)g Fs(e)1200
3231 y Fe(oct)p Fi(1)1358 3216 y Fu(is)f(the)h(n)m(um)m(b)s(er)f(of)g
(in)m(tercomp)s(onen)m(t)g(tree)h(and)f(cross)i(edges)f(\()p
Fs(v)t(;)17 b(w)s Fu(\))-116 3349 y(suc)m(h)31 b(that)f
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))f(is)h(not)g(in)f Fr(Suc)-5
b(c)p Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t Fu(\)\))30
b(at)f(line)g(11)h(of)f Fq(cr)p 2393 3349 V 40 w(tc)o
Fu(\()p Fs(v)t Fu(\).)43 b Fs(s)2786 3364 y Fe(cy)r(c)2918
3349 y Fu(is)30 b(the)g(n)m(um)m(b)s(er)h(of)e(cyclic)-116
3483 y(comp)s(onen)m(ts,)42 b(i.e.,)f(non)m(trivial)c(comp)s(onen)m(ts)
j(and)g(trivial)c(comp)s(onen)m(ts)41 b(with)e(a)g(self-lo)s(op)e
(edge.)65 b Fs(n)3731 3498 y Fi(1)3810 3483 y Fu(is)-116
3617 y(the)33 b(n)m(um)m(b)s(er)g(of)f(nonro)s(ot)g(v)m(ertices)h(with)
g(a)f(non-empt)m(y)h(partial)d(successor)35 b(set.)-116
3802 y Fj(Pro)s(of.)97 b Fu(Initializing)32 b(the)37
b(partial)d(successor)39 b(sets)e(at)g(line)e(5)h(tak)m(es)i
Fs(O)s Fu(\()p Fs(nZ)7 b Fu(\()p Fs(n)p Fu(\)\))35 b(total)g(time.)54
b(The)38 b(self-)-116 3935 y(lo)s(op)44 b(detection)i(at)f(line)g(7)g
(and)h(the)h(forw)m(ard)e(edge)i(detection)f(at)f(line)g(11)g(tak)m(e)i
(constan)m(t)f(time)f(p)s(er)-116 4069 y(eac)m(h)c(edge,)h(i.e.,)g
Fs(O)s Fu(\()p Fs(e)p Fu(\))d(total)f(time)h(in)g(the)h(w)m(orst)h
(case.)67 b(The)41 b(set)f(mem)m(b)s(ership)g(lo)s(okup)f(at)g(line)g
(11)g(is)-116 4203 y(executed)e(once)e(p)s(er)g(eac)m(h)h(in)m(tercomp)
s(onen)m(t)f(tree)g(or)g(cross)g(edge.)51 b(This)36 b(tak)m(es)g
Fs(O)s Fu(\()p Fs(e)3074 4218 y Fe(oct)3167 4203 y Fs(F)14
b Fu(\()p Fs(n)p Fu(\)\))35 b(total)e(time)-116 4336
y(in)j(the)i(w)m(orst)g(case.)59 b(The)38 b(insertion)e(and)i(union)e
(op)s(erations)h(at)g(line)f(12)h(are)g(executed)j(once)d(p)s(er)h(eac)
m(h)-116 4470 y(in)m(tercomp)s(onen)m(t)d(tree)h(or)g(cross)g(edge)g
(\()p Fs(v)t(;)17 b(w)s Fu(\))35 b(suc)m(h)i(that)e Fr(Comp)o
Fu(\()p Fs(w)s Fu(\))g(is)g(not)g(already)h(in)e Fr(Suc)-5
b(c)p Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t Fu(\)\).)-116
4604 y(This)33 b(tak)m(es)i Fs(O)s Fu(\()p Fs(e)519 4619
y Fe(oct)p Fi(1)648 4604 y Fu(\()p Fs(I)8 b Fu(\()p Fs(n)p
Fu(\))23 b(+)f Fs(U)10 b Fu(\()p Fs(n)p Fu(\)\)\))34
b(total)e(time)g(in)h(the)g(w)m(orst)i(case.)46 b(The)35
b(insertion)d(op)s(eration)g(at)h(line)-116 4737 y(17)e(is)g(executed)i
(once)f(p)s(er)g(eac)m(h)g(cyclic)f(comp)s(onen)m(t.)43
b(This)32 b(tak)m(es)h Fs(O)s Fu(\()p Fs(s)2557 4752
y Fe(cy)r(c)2658 4737 y Fs(I)8 b Fu(\()p Fs(n)p Fu(\)\))32
b(total)d(time)i(in)f(the)i(w)m(orst)-116 4871 y(case.)43
b(The)29 b(union)f(at)g(line)f(23)g(is)h(executed)j(once)e(p)s(er)f
(eac)m(h)h(nonro)s(ot)f(v)m(ertex)i(ha)m(ving)e(a)g(nonempt)m(y)h
(partial)-116 5004 y(successor)36 b(set.)47 b(This)34
b(tak)m(es)h Fs(O)s Fu(\()p Fs(n)1146 5019 y Fi(1)1185
5004 y Fs(U)10 b Fu(\()p Fs(n)p Fu(\)\))34 b(total)e(time)h(in)g(the)h
(w)m(orst)g(case.)48 b(When)35 b(w)m(e)f(sum)g(these)h(terms,)-116
5138 y(w)m(e)e(get)g Fs(O)s Fu(\()p Fs(nZ)7 b Fu(\()p
Fs(n)p Fu(\))22 b(+)g Fs(e)737 5153 y Fe(oct)831 5138
y Fs(F)14 b Fu(\()p Fs(n)p Fu(\))22 b(+)g(\()p Fs(e)1245
5153 y Fe(oct)p Fi(1)1397 5138 y Fu(+)g Fs(s)1541 5153
y Fe(cy)r(c)1643 5138 y Fu(\))p Fs(I)8 b Fu(\()p Fs(n)p
Fu(\))22 b(+)g(\()p Fs(n)2082 5153 y Fi(1)2144 5138 y
Fu(+)g Fs(e)2287 5153 y Fe(oct)p Fi(1)2417 5138 y Fu(\))p
Fs(U)10 b Fu(\()p Fs(n)p Fu(\)\).)p 2774 5138 4 67 v
2778 5075 59 4 v 2778 5138 V 2836 5138 4 67 v 30 5323
a(Note)48 b(that)f(the)i(n)m(um)m(b)s(er)f(of)f(cross)i(edges)g(in)d
(the)j(graph)e(dep)s(ends)j(on)d(the)h(order)g(in)f(whic)m(h)h(the)-116
5457 y(algorithm)34 b(happ)s(ens)39 b(to)e(scan)i(the)f(v)m(ertices)h
(and)e(the)h(adjacency)h(lists.)58 b(Th)m(us,)41 b(the)d(v)-5
b(alues)37 b(of)h Fs(e)3587 5472 y Fe(oct)3719 5457 y
Fu(and)-116 5591 y Fs(e)-71 5606 y Fe(oct)p Fi(1)90 5591
y Fu(are)32 b(not)f(\014xed)i(for)e(a)g(giv)m(en)h(graph.)43
b(W)-8 b(e)32 b(kno)m(w,)h(ho)m(w)m(ev)m(er,)i(that)c
Fs(e)2559 5606 y Fe(oct)p Fi(1)2717 5591 y Fh(\024)d
Fs(e)2867 5606 y Fe(oct)2989 5591 y Fh(\024)g Fs(e)3139
5606 y Fe(o)3205 5591 y Fh(\024)g Fs(e)p Fu(,)k(where)h
Fs(e)3740 5606 y Fe(o)3810 5591 y Fu(is)-116 5724 y(the)h(n)m(um)m(b)s
(er)g(of)g(in)m(tercomp)s(onen)m(t)g(edges.)48 b(F)-8
b(urther,)35 b(w)m(e)g(kno)m(w)g(that)e Fs(s)2564 5739
y Fe(cy)r(c)2697 5724 y Fh(\024)d Fs(s)p Fu(,)k(and)g
Fs(n)3160 5739 y Fi(1)3230 5724 y Fh(\024)d Fs(n)23 b
Fh(\000)g Fs(s)p Fu(,)35 b(where)-116 5858 y Fs(s)d Fu(is)g(the)h(n)m
(um)m(b)s(er)g(of)f(strong)h(comp)s(onen)m(ts)g(in)f(the)h(input)f
(graph.)p eop
60 25 bop -116 -294 a Fu(60)30 18 y(W)-8 b(e)31 b(presen)m(t)i(next)e
(the)h(w)m(orst-case)g(b)s(ounds)f(that)g(w)m(e)h(get)e(with)h
(di\013eren)m(t)g(successor)i(set)f(represen)m(ta-)-116
152 y(tions.)-116 371 y Fj(Corollary)23 b(3.15.)g Fu(Algorithm)c
Fq(cr)p 1206 371 34 4 v 40 w(tc)i Fu(runs)i(in)e Fs(O)s
Fu(\()p Fs(n)1862 335 y Fi(2)1902 371 y Fu(+)q Fs(ne)2082
386 y Fe(oct)p Fi(1)2211 371 y Fu(\))h(time)f(in)g(the)h(w)m(orst)h
(case)g(when)g(bit)e(v)m(ectors)-116 505 y(or)26 b(lists)g(augmen)m
(ted)i(with)e(bit)g(v)m(ectors)j(are)e(used)h(to)f(implemen)m(t)e(the)i
(successor)j(sets.)42 b(Algorithm)25 b Fq(cr)p 3726 505
V 39 w(tc)-116 638 y Fu(runs)k(in)f Fs(O)s Fu(\()p Fs(n)p
Fu(\()p Fs(n)477 653 y Fi(1)530 638 y Fu(+)14 b Fs(s)666
653 y Fe(cy)r(c)783 638 y Fu(+)g Fs(e)918 653 y Fe(oct)1013
638 y Fu(\)\))29 b(time)e(in)h(the)h(w)m(orst)h(case)f(when)h(lists)e
(are)g(used)i(to)f(implemen)m(t)d(successor)-116 772
y(sets.)43 b(Algorithm)27 b Fq(cr)p 703 772 V 39 w(tc)i
Fu(runs)h(in)f Fs(O)s Fu(\(\()p Fs(s)1407 787 y Fe(cy)r(c)1524
772 y Fu(+)15 b Fs(e)1660 787 y Fe(oct)1754 772 y Fu(\))i(log)g
Fs(n)e Fu(+)g Fs(n)p Fu(\()p Fs(n)2270 787 y Fi(1)2325
772 y Fu(+)g Fs(e)2461 787 y Fe(oct)p Fi(1)2591 772 y
Fu(\)\))30 b(time)d(in)i(the)h(w)m(orst)g(case)g(when)-116
906 y(balanced)i(ordered)h(binary)g(trees)g(are)g(used)h(to)e(implemen)
m(t)e(the)j(successor)i(sets.)30 1125 y(Assume)g(that)f(lists)g(are)g
(used)i(to)e(represen)m(t)i(the)f(successor)h(sets)g(in)d
Fq(cr)p 2766 1125 V 40 w(tc)p Fu(.)48 b(Th)m(us,)37 b(the)e(w)m
(orst-case)-116 1259 y(b)s(ound)44 b(is)f Fs(O)s Fu(\()p
Fs(n)p Fu(\()p Fs(n)575 1274 y Fi(1)643 1259 y Fu(+)30
b Fs(s)795 1274 y Fe(cy)r(c)927 1259 y Fu(+)g Fs(e)1078
1274 y Fe(oct)1172 1259 y Fu(\)\).)77 b(F)-8 b(or)42
b(eac)m(h)j(cyclic)e(comp)s(onen)m(t,)k(a)c(graph)g(con)m(tains)h(at)f
(least)h(one)-116 1392 y(edge.)59 b(F)-8 b(or)37 b(eac)m(h)h(nonro)s
(ot)f(v)m(ertex,)k(the)d(graph)f(con)m(tains)h(additionally)c(one)k
(edge.)59 b(Th)m(us,)41 b Fs(n)3447 1407 y Fi(1)3512
1392 y Fu(+)26 b Fs(s)3660 1407 y Fe(cy)r(c)3798 1392
y Fh(\024)-116 1526 y Fu(\()p Fs(n)d Fh(\000)g Fs(s)p
Fu(\))f(+)h Fs(s)354 1541 y Fe(cy)r(c)486 1526 y Fh(\024)29
b Fs(e)p Fu(,)34 b(and)f Fs(O)s Fu(\()p Fs(n)p Fu(\()p
Fs(n)1158 1541 y Fi(1)1220 1526 y Fu(+)23 b Fs(s)1365
1541 y Fe(cy)r(c)1490 1526 y Fu(+)f Fs(e)1633 1541 y
Fe(oct)1728 1526 y Fu(\)\))29 b(=)g Fs(O)s Fu(\()p Fs(n)p
Fu(\()p Fs(e)22 b Fu(+)h Fs(e)2361 1541 y Fe(oct)2455
1526 y Fu(\)\))29 b(=)g Fs(O)s Fu(\()p Fs(ne)p Fu(\).)45
b(Th)m(us,)36 b(the)e(w)m(orst-case)-116 1659 y(b)s(ound)f(of)f
Fq(cr)p 422 1659 V 39 w(tc)g Fu(is)h(at)f(most)g(as)h(great)f(as)h(the)
g(w)m(orst-case)g(b)s(ound)g(of)f Fq(simple)p 2919 1659
V 39 w(tc)p Fu(.)30 1794 y(Assume)48 b(that)g(bit)e(v)m(ectors)j(or)e
(lists)g(augmen)m(ted)g(with)g(bit)g(v)m(ectors)i(are)e(used)i(to)e
(represen)m(t)i(the)-116 1927 y(successor)41 b(sets)f(in)f
Fq(cr)p 753 1927 V 39 w(tc)p Fu(.)63 b(Th)m(us,)42 b(the)e(w)m
(orst-case)g(b)s(ound)f(is)g Fs(O)s Fu(\()p Fs(n)2512
1891 y Fi(2)2577 1927 y Fu(+)27 b Fs(ne)2783 1942 y Fe(oct)p
Fi(1)2913 1927 y Fu(\).)63 b Fs(ne)3144 1942 y Fe(oct)p
Fi(1)3313 1927 y Fu(is)38 b(at)h(most)g(as)-116 2061
y(great)29 b(as)h Fs(ne)p Fu(.)43 b(An)30 b(in\014nite)e(set)j(of)e
(graphs)h(\(and)f(their)g(tra)m(v)m(ersals\))i(exists,)g(for)e(whic)m
(h)h Fs(ne)3220 2076 y Fe(oct)p Fi(1)3380 2061 y Fu(is)f(negligible)
-116 2194 y(compared)d(to)f Fs(ne)i Fu(\(for)e(instance,)j(all)c
(graphs)i(consisting)g(of)f(a)h(single)f(strong)h(comp)s(onen)m(t\).)41
b(When)27 b Fs(e)h(>)g(n)p Fu(,)-116 2328 y Fs(ne)36
b Fu(is)e(greater)i(than)f Fs(n)745 2292 y Fi(2)785 2328
y Fu(;)i(when)f(the)g(graph)f(is)g(dense,)j Fs(n)2012
2292 y Fi(2)2087 2328 y Fu(is)d(negligible)d(compared)k(to)f
Fs(ne)p Fu(.)52 b(Th)m(us,)38 b(when)-116 2462 y Fs(e)28
b(>)f(n)p Fu(,)33 b Fq(cr)p 304 2462 V 40 w(tc)f Fu(has)h(a)f(b)s
(etter)h(w)m(orst-case)h(b)s(ound)f(than)f Fq(simple)p
2350 2462 V 39 w(tc)p Fu(.)-116 2818 y Ft(3.4)160 b(New)54
b(algorithm)g(ST)-13 b(A)l(CK)p 1918 2818 49 4 v 57 w(TC)-116
3051 y Fu(Compared)28 b(to)f Fq(simple)p 785 3051 34
4 v 39 w(tc)p Fu(,)i Fq(cr)p 1117 3051 V 40 w(tc)f Fu(reduces)h(the)g
(n)m(um)m(b)s(er)f(and)g(the)h(total)d(size)j(of)e(the)i(partial)c
(successor)-116 3185 y(sets)38 b(generated)g(for)f(nonro)s(ot)f(v)m
(ertices)j(and)e(the)g(n)m(um)m(b)s(er)h(of)f(set)h(op)s(erations.)56
b(Ho)m(w)m(ev)m(er,)41 b(some)c(inputs)-116 3318 y(cause)45
b Fq(cr)p 282 3318 V 39 w(tc)f Fu(to)g(compute)g(partial)e(successor)k
(sets)g(that)d(are)h(not)g(needed)i(after)e(the)g(computation.)-116
3452 y(Com)m(bining)d(the)j(partial)c(successor)46 b(sets)e(requires)g
(sev)m(eral)g(union)e(op)s(erations,)j(whic)m(h)f(are)f(the)g(most)-116
3586 y(exp)s(ensiv)m(e)35 b(op)s(erations)d(in)g(transitiv)m(e)h
(closure)g(computation.)43 b(W)-8 b(e)34 b(w)m(ould)f(lik)m(e)f(to)h
(eliminate)d(all)h(partial)-116 3719 y(successor)42 b(sets)f(generated)
g(for)e(nonro)s(ot)g(v)m(ertices)i(and)f(th)m(us)h(a)m(v)m(oid)f(the)h
(exp)s(ensiv)m(e)g(union)f(op)s(erations)-116 3853 y(required)34
b(to)f(com)m(bine)f(them.)46 b(The)34 b(algorithm)c(that)k(w)m(e)g
(seek)h(should)e(generate)h(exactly)g(one)f(successor)-116
3987 y(set)k(p)s(er)f(eac)m(h)h(strong)f(comp)s(onen)m(t.)54
b(The)37 b(problem)e(is)g(that)h(no)g(single)f(lo)s(cation)f(is)h(asso)
s(ciated)h(with)g(an)-116 4120 y(incomplete)c(strong)h(comp)s(onen)m
(t,)h(where)h(w)m(e)g(could)e(insert)g(its)g(successors.)49
b(Th)m(us,)36 b(if)c(w)m(e)j(construct)f(the)-116 4254
y(successor)g(set)f(of)f(a)g(strong)g(comp)s(onen)m(t)h(during)e(the)i
(detection)f(of)g(that)g(comp)s(onen)m(t,)g(w)m(e)i(cannot)e(a)m(v)m
(oid)-116 4387 y(building)25 b(partial)g(successor)30
b(sets)e(and)g(unioning)e(them.)41 b(The)29 b(other)e(strategy)h(that)f
(is)g(used)i(in)d(transitiv)m(e)-116 4521 y(closure)i(algorithms)d
(presen)m(ted)30 b(in)e(the)g(literature)e([64,)i(91,)g(101)o(,)g(105)o
(])g(is)g(to)f(construct)i(the)g(successor)h(set)-116
4655 y(of)c(a)h(comp)s(onen)m(t)g(only)g(after)g(the)g(comp)s(onen)m(t)
h(is)e(detected)j(or)e(only)f(after)h(all)e(comp)s(onen)m(ts)j(are)f
(detected.)-116 4788 y(The)33 b(problem)f(with)g(the)h(previous)g
(algorithms)d(is)i(that)g(they)i(scan)f(the)g(input)f(graph)h(at)f
(least)g(t)m(wice.)30 4922 y(In)40 b(this)f(section,)i(w)m(e)f(presen)m
(t)h(a)e(new)i(transitiv)m(e)e(closure)g(algorithm)d(that)j(generates)i
(exactly)f(one)-116 5056 y(successor)i(set)e(p)s(er)g(eac)m(h)g(strong)
g(comp)s(onen)m(t)g(without)f(scanning)h(the)g(input)f(graph)g(t)m
(wice.)65 b(The)41 b(new)-116 5190 y(algorithm)h(dela)m(ys)j(the)h
(construction)f(of)g(the)h(successor)h(set)f Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\))45 b(of)f(comp)s(onen)m(t)h
Fs(C)52 b Fu(un)m(til)44 b Fs(C)52 b Fu(is)-116 5323
y(detected,)41 b(th)m(us)e(a)m(v)m(oiding)e(the)h(creation)g(of)f
(partial)f(successor)41 b(sets)e(for)e(nonro)s(ot)h(v)m(ertices.)61
b(The)39 b(algo-)-116 5457 y(rithm)32 b(a)m(v)m(oids)i(scanning)g(the)h
(input)e(graph)h(t)m(wice,)h(since)f(during)f(the)i(detection)f(of)f
(comp)s(onen)m(t)h Fs(C)7 b Fu(,)34 b(the)-116 5591 y(algorithm)26
b(collects)k(comp)s(onen)m(ts)g(adjacen)m(t)h(from)d
Fs(C)37 b Fu(that)30 b(are)g(later)f(needed)i(in)e(constructing)h
Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)-116 5724 y(An)30
b(auxiliary)e(stac)m(k,)k(resem)m(bling)d(the)i(v)m(ertex)h(stac)m(k)f
(of)f(T)-8 b(arjan's)30 b(algorithm,)e(is)h(used)j(for)d(this)h(purp)s
(ose.)-116 5858 y(When)i(a)g(comp)s(onen)m(t)f Fs(C)39
b Fu(is)31 b(detected,)j(the)e(comp)s(onen)m(ts)g(that)f(w)m(ere)i
(stored)g(on)m(to)e(the)h(stac)m(k)h(during)e(the)p eop
61 26 bop 3778 -294 a Fu(61)-116 18 y(detection)28 b(of)g
Fs(C)35 b Fu(are)28 b(remo)m(v)m(ed)h(from)e(the)h(stac)m(k)i(and)e
(the)g(successor)j(set)e(of)e(the)i(comp)s(onen)m(t)f(is)g(computed)
-116 152 y(b)m(y)40 b(unioning)f(the)h(set)g(of)g(these)h(comp)s(onen)m
(ts)f(and)g(their)f(successor)j(sets.)67 b(T)-8 b(o)40
b(minimize)c(the)k(n)m(um)m(b)s(er)-116 286 y(of)33 b(union)h(op)s
(erations)f(needed,)j(the)e(algorithm)d(sorts)j(the)h(comp)s(onen)m(ts)
f(on)g(the)g(stac)m(k)i(in)d(a)h(top)s(ological)-116
419 y(order)e(b)s(efore)h(computing)e(the)i(successor)i(set.)30
553 y(The)c(new)g(algorithm,)d(called)h Fq(st)-7 b(a)n(ck)p
1456 553 34 4 v 39 w(tc)1606 517 y Fi(1)1646 553 y Fu(,)30
b(is)g(presen)m(ted)i(in)e(Figure)h(3.16.)42 b(Lik)m(e)31
b Fq(cr)p 3232 553 V 39 w(tc)p Fu(,)g Fq(st)-7 b(a)n(ck)p
3726 553 V 39 w(tc)-116 686 y Fu(stores)40 b(strong)g(comp)s(onen)m(ts)
g(instead)g(of)f(v)m(ertices)i(in)m(to)e(the)i(successors)h(sets.)66
b(The)41 b(insertion)e(of)g(com-)-116 820 y(p)s(onen)m(t)c
Fs(C)41 b Fu(in)m(to)34 b(its)g(o)m(wn)h(successor)i(set)e
Fr(Suc)-5 b(c)o Fu(\()p Fs(C)7 b Fu(\))35 b(is)f(handled)g(as)h(in)e
Fq(cr)p 2652 820 V 40 w(tc)p Fu(.)49 b Fq(st)-7 b(a)n(ck)p
3165 820 V 39 w(tc)34 b Fu(pro)s(cesses)j(an)-116 954
y(edge)42 b(\()p Fs(v)t(;)17 b(w)s Fu(\))41 b(lea)m(ving)g(a)g(v)m
(ertex)j Fs(v)h Fu(lik)m(e)c Fq(cr)p 1541 954 V 40 w(tc)p
Fu(,)j(except)f(when)g(\()p Fs(v)t(;)17 b(w)s Fu(\))41
b(is)g(an)h(in)m(tercomp)s(onen)m(t)g(tree)g(or)-116
1087 y(cross)h(edge.)73 b(Instead)44 b(of)d(adding)h
Fr(Comp)o Fu(\()p Fs(w)s Fu(\))f(and)i Fr(Suc)-5 b(c)o
Fu(\()p Fr(Comp)o Fu(\()p Fs(w)s Fu(\)\))42 b(in)m(to)f
Fr(Suc)-5 b(c)p Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t
Fu(\)\),)45 b Fq(st)-7 b(a)n(ck)p 3726 1087 V 39 w(tc)-116
1221 y Fu(stores)37 b Fr(Comp)o Fu(\()p Fs(w)s Fu(\))f(in)g(the)h
(auxiliary)d(stac)m(k)k Fr(cstack)o Fu(.)55 b(This)37
b(is)f(done)h(at)f(line)f(13)h(in)g Fq(st)-7 b(a)n(ck)p
3306 1221 V 40 w(tc)p Fu(.)55 b(When)37 b(a)-116 1355
y(comp)s(onen)m(t)30 b Fs(C)38 b Fu(is)30 b(detected,)i
Fq(st)-7 b(a)n(ck)p 1285 1355 V 40 w(tc)30 b Fu(creates)h(a)g(new)g
(successor)i(set)e Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)42
b(If)31 b Fs(C)37 b Fu(is)30 b(non)m(trivial)e(or)-116
1488 y(if)c Fs(C)34 b Fu(=)28 b Fh(f)p Fs(r)s Fh(g)c
Fu(and)i(the)f(input)g(graph)g(con)m(tains)g(a)g(self-lo)s(op)e(\()p
Fs(r)m(;)17 b(r)s Fu(\),)26 b Fq(st)-7 b(a)n(ck)p 2584
1488 V 40 w(tc)25 b Fu(inserts)g Fs(C)33 b Fu(in)m(to)24
b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)41 b(A)m(t)-116
1622 y(lines)28 b(20{21,)g Fq(st)-7 b(a)n(ck)p 689 1622
V 40 w(tc)29 b Fu(sorts)g(the)g(comp)s(onen)m(ts)h(that)e(w)m(ere)j
(stored)e(on)m(to)g Fr(cstack)f Fu(during)g(the)i(detection)-116
1755 y(of)35 b Fs(C)43 b Fu(in)m(to)35 b(a)h(top)s(ological)c(order)37
b(and)f(eliminates)d(duplicates.)54 b(T)-8 b(o)36 b(kno)m(w)h(the)f(n)m
(um)m(b)s(er)h(of)e(comp)s(onen)m(ts)-116 1889 y(that)29
b(are)f(stored)i(on)m(to)f Fr(cstack)f Fu(during)h(the)g(detection)g
(of)g(comp)s(onen)m(t)g Fs(C)7 b Fu(,)29 b Fq(st)-7 b(a)n(ck)p
2952 1889 V 40 w(tc)28 b Fu(stores)i(the)g(curren)m(t)-116
2023 y(heigh)m(t)37 b(of)f Fr(cstack)h Fu(in)m(to)f(a)h(lo)s(cal)e(v)-5
b(ariable)36 b Fr(Save)-5 b(dHeight)o Fu(\()p Fs(v)t
Fu(\))37 b(at)f(line)g(5.)57 b(After)37 b(sorting)g(the)g(comp)s(onen)m
(ts)-116 2156 y(in)m(to)f(a)h(top)s(ological)d(order,)39
b Fq(st)-7 b(a)n(ck)p 1247 2156 V 39 w(tc)37 b Fu(remo)m(v)m(es)i(the)e
(comp)s(onen)m(ts)h(from)e Fr(cstack)h Fu(at)g(lines)f(22{25.)57
b(F)-8 b(or)-116 2290 y(eac)m(h)38 b(comp)s(onen)m(t)f
Fs(X)45 b Fu(remo)m(v)m(ed)38 b(from)e Fr(cstack)p Fu(,)i
Fq(st)-7 b(a)n(ck)p 1972 2290 V 40 w(tc)37 b Fu(c)m(hec)m(ks)j(if)c
Fs(X)45 b Fu(is)37 b(already)f(in)h Fr(Suc)-5 b(c)p Fu(\()p
Fs(C)7 b Fu(\).)57 b(If)37 b Fs(X)-116 2424 y Fu(is)d(not)h(in)g
Fr(Suc)-5 b(c)o Fu(\()p Fs(C)7 b Fu(\),)36 b Fq(st)-7
b(a)n(ck)p 970 2424 V 40 w(tc)34 b Fu(adds)i Fs(X)43
b Fu(and)35 b Fr(Suc)-5 b(c)p Fu(\()p Fs(X)8 b Fu(\))35
b(in)m(to)f Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)51
b(If)35 b Fs(X)43 b Fu(is)34 b(already)h(in)f Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\),)-116 2557 y(ev)m(ery)34
b(comp)s(onen)m(t)f Fs(Y)54 b Fu(in)31 b Fr(Suc)-5 b(c)p
Fu(\()p Fs(X)8 b Fu(\))32 b(also)g(is)g(in)g Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\),)32 b(and)h Fq(st)-7 b(a)n(ck)p
2541 2557 V 39 w(tc)33 b Fu(ignores)f Fs(X)8 b Fu(.)30
2691 y(The)48 b(details)f(of)f(the)i(sorting)f(are)g(not)g(presen)m
(ted)j(in)c(Figure)32 b(3.16)o(.)88 b(It)47 b(can)h(b)s(e)g(done)f
(e\016cien)m(tly)-116 2824 y(in)c(the)h(follo)m(wing)c(w)m(a)m(y)-8
b(.)78 b(Let)44 b Fs(r)i Fu(b)s(e)e(the)g(ro)s(ot)f(of)g(comp)s(onen)m
(t)g Fs(C)7 b Fu(.)77 b(Scan)44 b(the)g(comp)s(onen)m(ts)g(on)f
Fr(cstack)-116 2958 y Fu(b)s(et)m(w)m(een)c(the)f(top)f(and)g
Fr(Save)-5 b(dHeight)o Fu(\()p Fs(r)s Fu(\))37 b(and)g(use)h(a)f(bit)f
(v)m(ector)i(to)f(record)h(the)f(comp)s(onen)m(ts)h(that)f(are)-116
3092 y(presen)m(t,)d(remo)m(ving)d(duplicates.)43 b(If)32
b(the)g(n)m(um)m(b)s(er)h(of)f(unique)g(comp)s(onen)m(ts)h(remaining)c
(on)j Fr(cstack)g Fu(ab)s(o)m(v)m(e)-116 3225 y Fr(Save)-5
b(dHeight)o Fu(\()p Fs(r)s Fu(\))39 b(is)f(small,)h(i.e.,)i(a)d(n)m(um)
m(b)s(er)i Fs(x)g Fu(suc)m(h)g(that)f Fs(x)17 b Fu(log)g
Fs(x)39 b Fu(is)g(smaller)e(than)i Fs(n)p Fu(,)i(sort)f(them)f(in)m(to)
-116 3359 y(the)30 b(top)s(ological)d(order)j(using)g(some)g(common)f
(sorting)g(algorithm.)40 b(Otherwise,)31 b(scan)g(the)g(bit)e(v)m
(ector)i(to)-116 3493 y(obtain)g(the)i(comp)s(onen)m(ts)g(directly)f
(in)g(the)h(top)s(ological)c(order.)30 3626 y(Note)k(that)f
Fr(cstack)g Fu(and)h Fr(vstack)f Fu(could)g(b)s(e)h(merged)f(in)m(to)g
(a)g(single)g(stac)m(k.)-116 3839 y Fj(Example)d(3.8.)e
Fu(Consider)g(again)e(graph)h Fs(G)g Fu(presen)m(ted)j(in)c(Figure)32
b(3.15\(a\))o(.)41 b(In)27 b(Figure)32 b(3.17)o(,)c(w)m(e)f(presen)m(t)
-116 3973 y(the)34 b(condensation)h(graph)p 919 3895
77 4 v 34 w Fs(G)f Fu(induced)g(b)m(y)h(the)g(strong)f(comp)s(onen)m
(ts)h(of)f Fs(G)p Fu(.)48 b(If)34 b(w)m(e)h(apply)f Fq(st)-7
b(a)n(ck)p 3605 3973 34 4 v 39 w(tc)34 b Fu(to)-116 4106
y Fs(G)d Fu(starting)f(at)h(v)m(ertex)j Fs(a)d Fu(and)h(the)f
(adjacency)i(lists)d(are)i(the)g(same)f(as)g(in)g(Figure)g(3.15\(b\),)h
(w)m(e)g(need)g(only)-116 4240 y(three)d(union)e(op)s(erations)h(to)g
(compute)g(the)h(transitiv)m(e)e(closure.)43 b(The)29
b(edges)g(of)f(the)h(condensation)f(graph)-116 4374 y(that)j(cause)i
(these)f(unions)g(are)f(dra)m(wn)h(solid)f(whereas)i(other)e(edges)i
(are)e(dra)m(wn)i(dashed)f(in)f(Figure)g(3.17.)-116 4507
y(In)k(Example)g(3.7,)h(where)g(w)m(e)g(applied)e Fq(cr)p
1504 4507 V 40 w(tc)h Fu(to)g(graph)g Fs(G)p Fu(,)g(w)m(e)i(needed)f
(sev)m(en)i(union)c(op)s(erations)h(and)-116 4641 y(in)c(Example)h
(3.4,)g(where)i(w)m(e)f(applied)f Fq(simple)p 1673 4641
V 39 w(tc)g Fu(to)g(graph)g Fs(G)p Fu(,)g(w)m(e)i(needed)g(17)d(union)h
(op)s(erations.)p 3811 4641 4 67 v 3815 4578 59 4 v 3815
4641 V 3873 4641 4 67 v -116 4933 a Fj(Theorem)41 b(3.16.)c
Fu(Algorithm)d Fq(st)-7 b(a)n(ck)p 1389 4933 34 4 v 40
w(tc)36 b Fu(correctly)h(computes)g(the)g(transitiv)m(e)f(closure)g(of)
g(the)h(input)-116 5067 y(graph)32 b Fs(G)p Fu(.)-116
5279 y Fj(Pro)s(of.)79 b Fu(The)33 b(strong)f(comp)s(onen)m(ts)g(are)g
(detected)h(as)f(in)f(T)-8 b(arjan's)32 b(algorithm.)40
b(W)-8 b(e)32 b(only)f(ha)m(v)m(e)i(to)f(sho)m(w)-116
5413 y(that)26 b(the)h(successor)i(sets)e(are)g(correctly)g(computed.)
41 b(W)-8 b(e)27 b(sho)m(w)h(that)e(after)g(the)h(execution)g(of)f
Fq(st)-7 b(a)n(ck)p 3698 5413 V 40 w(tc)p Fu(,)-116 5547
y(the)30 b(successor)i(set)e Fr(Suc)-5 b(c)p Fu(\()p
Fs(C)7 b Fu(\))29 b(of)g(a)h(comp)s(onen)m(t)f Fs(C)37
b Fu(con)m(tains)29 b(a)h(comp)s(onen)m(t)f Fs(X)37 b
Fu(i\013)29 b Fs(G)g Fu(con)m(tains)h(a)f(non-n)m(ull)-116
5680 y(path)j Fs(v)184 5627 y Fi(+)162 5680 y Fh(!)p
Fs(w)j Fu(suc)m(h)f(that)e(v)m(ertex)i Fs(v)j Fu(is)32
b(in)g Fs(C)39 b Fu(and)33 b(v)m(ertex)h Fs(w)h Fu(is)d(in)g
Fs(X)8 b Fu(.)p -116 5766 1597 4 v -4 5828 a Fc(1)33
5858 y Fb(In)28 b([92)o(])g(w)n(e)f(called)g(this)h(algorithm)f
Fa(comp)p 1408 5858 28 4 v 33 w(tc)p Fb(.)p eop
62 27 bop -116 -294 a Fu(62)-116 576 y Fp(\(1\))218 b
Fo(pro)s(cedure)31 b Fn(st)-6 b(a)n(ck)p 967 576 31 4
v 35 w(tc)o Fp(\()p Fm(v)s Fp(\);)-116 701 y(\(2\))218
b Fo(b)s(egin)-116 827 y Fp(\(3\))385 b Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b Fm(v)s Fp(;)31 b Fl(Comp)q
Fp(\()p Fm(v)s Fp(\))g(:=)61 b Fl(Nil)p Fp(;)-116 952
y(\(4\))385 b Fn(push)o Fp(\()p Fm(v)s(;)15 b Fl(vstack)q
Fp(\);)-116 1077 y(\(5\))385 b Fl(Save)-5 b(dHeight)q
Fp(\()p Fm(v)s Fp(\))31 b(:=)60 b Fn(height)p Fp(\()p
Fl(cstack)q Fp(\);)-116 1203 y(\(6\))385 b Fl(SelfL)-5
b(o)g(op)r Fp(\()p Fm(v)s Fp(\))31 b(:=)61 b Fo(false)p
Fp(;)-116 1328 y(\(7\))385 b Fo(for)30 b(eac)m(h)h Fp(v)m(ertex)h
Fm(w)g Fp(suc)m(h)e(that)h(\()p Fm(v)s(;)15 b(w)r Fp(\))28
b Fk(2)c Fm(E)36 b Fo(do)31 b(b)s(egin)-116 1453 y Fp(\(8\))551
b Fo(if)31 b Fm(w)d Fp(=)c Fm(v)34 b Fo(then)c Fl(SelfL)-5
b(o)g(op)r Fp(\()p Fm(v)s Fp(\))32 b(:=)60 b Fo(true)-116
1579 y Fp(\(9\))551 b Fo(else)31 b(b)s(egin)-116 1704
y Fp(\(10\))673 b Fo(if)30 b Fm(w)j Fp(is)d(not)g(already)g(visited)f
Fo(then)h Fn(st)-6 b(a)n(ck)p 2268 1704 V 35 w(tc)o Fp(\()p
Fm(w)r Fp(\);)-116 1829 y(\(11\))673 b Fo(if)30 b Fl(Comp)r
Fp(\()p Fm(w)r Fp(\))c(=)f Fl(Nil)30 b Fo(then)g Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(v)s Fp(\))32 b(:=)60 b Fn(min)p
Fp(\()p Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(v)s Fp(\))p Fm(;)15
b Fl(R)-5 b(o)g(ot)s Fp(\()p Fm(w)r Fp(\)\))-116 1955
y(\(12\))673 b Fo(else)31 b(if)f Fp(\()p Fm(v)s(;)15
b(w)r Fp(\))32 b(is)d(not)i(a)g(forw)m(ard)f(edge)h Fo(then)-116
2080 y Fp(\(13\))840 b Fn(push)o Fp(\()p Fl(Comp)q Fp(\()p
Fm(w)r Fp(\))p Fm(;)15 b Fl(cstack)r Fp(\);)-116 2205
y(\(14\))506 b Fo(end)-116 2331 y Fp(\(15\))340 b Fo(end)p
Fp(;)-116 2456 y(\(16\))g Fo(if)30 b Fl(R)-5 b(o)g(ot)r
Fp(\()p Fm(v)s Fp(\))26 b(=)f Fm(v)34 b Fo(then)c(b)s(egin)-116
2581 y Fp(\(17\))506 b(create)32 b(a)f(new)f(comp)s(onen)m(t)h
Fm(C)7 b Fp(;)-116 2707 y(\(18\))506 b Fo(if)31 b Fn(top)o
Fp(\()p Fl(vstack)q Fp(\))25 b Fk(6)p Fp(=)g Fm(v)34
b Fo(or)c Fl(SelfL)-5 b(o)g(op)s Fp(\()p Fm(v)s Fp(\))31
b Fo(then)f Fl(Suc)-5 b(c)p Fp(\()p Fm(C)7 b Fp(\))30
b(:=)61 b Fk(f)p Fm(C)7 b Fk(g)-116 2832 y Fp(\(19\))506
b Fo(else)31 b Fl(Suc)-5 b(c)p Fp(\()p Fm(C)7 b Fp(\))30
b(:=)61 b Fk(;)p Fp(;)-116 2957 y(\(20\))506 b(sort)31
b(the)g(comp)s(onen)m(ts)f(in)f Fl(cstack)i Fp(b)s(et)m(w)m(een)g
Fl(Save)-5 b(dHeight)q Fp(\()p Fm(v)s Fp(\))31 b(and)f
Fn(height)o Fp(\()p Fl(cstack)q Fp(\))-116 3083 y(\(21\))506
b(in)m(to)31 b(a)g(top)s(ological)f(order)g(and)f(eliminate)g
(duplicates;)-116 3208 y(\(22\))506 b Fo(while)30 b Fn(height)p
Fp(\()p Fl(cstack)q Fp(\))25 b Fk(6)p Fp(=)g Fl(Save)-5
b(dHeight)q Fp(\()p Fm(v)s Fp(\))31 b Fo(do)g(b)s(egin)-116
3333 y Fp(\(23\))673 b Fm(X)38 b Fp(:=)60 b Fn(pop)p
Fp(\()p Fl(cstack)p Fp(\);)-116 3459 y(\(24\))673 b Fo(if)30
b Fm(X)j Fk(62)25 b Fl(Suc)-5 b(c)p Fp(\()p Fm(C)7 b
Fp(\))30 b Fo(then)g Fl(Suc)-5 b(c)p Fp(\()p Fm(C)7 b
Fp(\))31 b(:=)60 b Fl(Suc)-5 b(c)p Fp(\()p Fm(C)7 b Fp(\))21
b Fk([)e(f)p Fm(X)7 b Fk(g)22 b([)e Fl(Suc)-5 b(c)p Fp(\()p
Fm(X)7 b Fp(\);)-116 3584 y(\(25\))506 b Fo(end)p Fp(;)-116
3709 y(\(26\))g Fo(rep)s(eat)-116 3834 y Fp(\(27\))673
b Fm(w)33 b Fp(:=)61 b Fn(pop)o Fp(\()p Fl(vstack)p Fp(\);)-116
3960 y(\(28\))673 b Fl(Comp)q Fp(\()p Fm(w)r Fp(\))32
b(:=)61 b Fm(C)7 b Fp(;)-116 4085 y(\(29\))673 b(insert)29
b Fm(w)k Fp(in)m(to)e(comp)s(onen)m(t)f Fm(C)7 b Fp(;)-116
4210 y(\(30\))506 b Fo(un)m(til)31 b Fm(w)d Fp(=)c Fm(v)-116
4336 y Fp(\(31\))340 b Fo(end)-116 4461 y Fp(\(32\))173
b Fo(end)p Fp(;)-116 4586 y(\(33\))g Fo(b)s(egin)31 b
Fp(/*)g(Main)f(program)g(*/)-116 4712 y(\(34\))340 b
Fl(vstack)61 b Fp(:=)f Fk(;)p Fp(;)31 b Fl(cstack)61
b Fp(:=)g Fk(;)p Fp(;)-116 4837 y(\(35\))340 b Fo(for)30
b(eac)m(h)h Fp(v)m(ertex)h Fm(v)c Fk(2)d Fm(V)51 b Fo(do)-116
4962 y Fp(\(36\))506 b Fo(if)31 b Fm(v)i Fp(is)d(not)g(already)g
(visited)f Fo(then)h Fn(st)-6 b(a)n(ck)p 2081 4962 V
35 w(tc)o Fp(\()p Fm(v)s Fp(\))-116 5088 y(\(37\))173
b Fo(end)p Fp(.)1090 5269 y Fq(Figure)38 b(3.16)p Fu(:)43
b(Algorithm)30 b Fq(st)-7 b(a)n(ck)p 2492 5269 34 4 v
39 w(tc)p Fu(.)p eop
63 28 bop 3778 -294 a Fu(63)623 1006 y @beginspecial
0 @llx 0 @lly 453 @urx 196 @ury 3016 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 11 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <43>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -65 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 14 def 
/VertexY {2 get }bind def 
/OrigoY -450 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-65 -450 14 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(2) 300 500 null Vertex
(3) 400 500 null Vertex
(4) 300 600 null Vertex
(1) 200 500 null Vertex
(1) (1) [[/setdash [3.0 ]0.0 ][/startangle -90 ][/deviation 2 ]] Edge
(4) (4) [[/setdash [3.0 ]0.0 ][/startangle 180 ][/deviation 2 ]] Edge
(2) (1) [] Edge
(4) (3) [] Edge
(2) (2) [[/setdash [3.0 ]0.0 ][/startangle 0 ][/deviation 2 ]] Edge
(4) (2) [] Edge
(4) (1) [[/setdash [3.0 ]0.0 ]] Edge
[[65 490 167 508 ]{gsave 65 497 moveto DataFont setfont <537563632843>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 1 6 rmoveto <29203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[431 490 518 508 ]{gsave 431 497 moveto DataFont setfont <537563632843>show ScriptFont setfont -2 -6 rmoveto <33>show DataFont setfont 1 6 rmoveto <29203d207b7d>show grestore }] Graphics
[[234 628 406 646 ]{gsave 234 635 moveto DataFont setfont <537563632843>show ScriptFont setfont -2 -6 rmoveto <34>show DataFont setfont 1 6 rmoveto <29203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -2 -6 rmoveto <33>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -2 -6 rmoveto <34>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
[[234 450 358 468 ]{gsave 234 458 moveto DataFont setfont <537563632843>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <29203d207b43>show ScriptFont setfont -2 -6 rmoveto <31>show DataFont setfont 0 6 rmoveto <2c2043>show ScriptFont setfont -2 -6 rmoveto <32>show DataFont setfont 1 6 rmoveto <7d>show grestore }] Graphics
$GraphsEnd
 @endspecial -116 1198 a Fq(Figure)49 b(3.17)p Fu(:)67
b(The)45 b(condensation)f(graph)p 1663 1120 77 4 v 44
w Fs(G)g Fu(of)g(graph)g Fs(G)g Fu(presen)m(ted)i(in)e(Figure)31
b(3.15\(a\))43 b(and)h(the)-116 1306 y(corresp)s(onding)32
b(successor)j(sets.)-116 1603 y(W)-8 b(e)33 b(pro)m(v)m(e)h(the)f(if)f
(part)h(and)g(the)g(only-if)e(part)h(at)h(the)g(same)g(time)e(using)i
(induction)f(on)g(the)i(lev)m(el)e(of)g(the)-116 1737
y(strong)i(comp)s(onen)m(t)g Fs(C)7 b Fu(.)47 b(W)-8
b(e)34 b(also)f(sho)m(w)i(that)f(all)e(comp)s(onen)m(ts)i(that)g(are)g
(stored)g(on)g Fr(cstack)f Fu(during)g(the)-116 1870
y(detection)f(of)h Fs(C)39 b Fu(are)33 b(remo)m(v)m(ed)g(from)e
Fr(cstack)i Fu(when)g Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7
b Fu(\))32 b(is)g(constructed.)-106 2118 y Fj(\(i\))84
b Fu(Let)24 b Fs(C)31 b Fu(b)s(e)24 b(a)f(comp)s(onen)m(t)h(at)f(lev)m
(el)g(zero.)41 b(Since)24 b(no)g(edge)g(lea)m(v)m(es)h(comp)s(onen)m(t)
f Fs(C)7 b Fu(,)25 b(no)f(comp)s(onen)m(ts)g(are)98 2251
y(stored)32 b(on)m(to)f Fr(cstack)g Fu(during)f(the)i(detection)f(of)g
Fs(C)7 b Fu(,)31 b(and)g(no)g(other)g(comp)s(onen)m(t)h(than)f
Fs(C)38 b Fu(is)30 b(inserted)98 2385 y(in)m(to)35 b
Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)53 b(When)36
b(all)e(edges)j(lea)m(ving)e(the)h(ro)s(ot)f Fs(r)j Fu(are)e(pro)s
(cessed,)i(the)e(top-most)f(elemen)m(t)g(of)98 2518 y
Fr(vstack)27 b Fu(is)g Fs(r)j Fu(i\013)c Fs(C)34 b Fu(is)27
b(trivial.)39 b(The)28 b(initial)23 b(v)-5 b(alue)27
b(of)g Fr(SelfL)-5 b(o)g(op)o Fu(\()p Fs(r)s Fu(\))26
b(is)h Fj(false)p Fu(.)42 b Fq(st)-7 b(a)n(ck)p 3174
2518 34 4 v 40 w(tc)27 b Fu(assigns)g Fj(true)98 2652
y Fu(to)38 b Fr(SelfL)-5 b(o)g(op)o Fu(\()p Fs(r)s Fu(\))38
b(at)f(line)g(8)h(i\013)f(the)i(input)e(graph)h(has)h(an)f(edge)g(\()p
Fs(r)m(;)17 b(r)s Fu(\).)60 b(Th)m(us,)41 b Fq(st)-7
b(a)n(ck)p 3393 2652 V 40 w(tc)38 b Fu(assigns)98 2786
y Fh(f)p Fs(C)7 b Fh(g)30 b Fu(to)h Fr(Suc)-5 b(c)o Fu(\()p
Fs(C)7 b Fu(\))31 b(at)f(line)f(18)h(i\013)g Fs(C)37
b Fu(is)31 b(either)f(non-trivial)e(or)i Fs(C)k Fu(=)28
b Fh(f)p Fs(r)s Fh(g)i Fu(and)h(a)f(self-lo)s(op)e(edge)j(\()p
Fs(r)m(;)17 b(r)s Fu(\))98 2919 y(exists.)43 b(Otherwise,)30
b Fq(st)-7 b(a)n(ck)p 1175 2919 V 39 w(tc)28 b Fu(assigns)g
Fh(;)g Fu(to)f Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)42
b(Hence)29 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))28
b(is)f(correctly)i(computed.)-137 3107 y Fj(\(ii\))83
b Fu(Let)44 b Fs(C)51 b Fu(b)s(e)43 b(a)h(comp)s(onen)m(t)f(at)h(lev)m
(el)f Fs(l)49 b(>)d Fu(0)e(with)f(ro)s(ot)g(v)m(ertex)i
Fs(r)s Fu(.)76 b(The)45 b(correct)f(insertion)f(of)g
Fs(C)98 3240 y Fu(in)m(to)38 b Fr(Suc)-5 b(c)p Fu(\()p
Fs(C)7 b Fu(\))39 b(can)g(b)s(e)g(sho)m(wn)h(as)f(in)f(the)i(induction)
e(basis.)62 b(W)-8 b(e)39 b(only)g(need)h(to)e(sho)m(w)i(that)f(eac)m
(h)98 3374 y(comp)s(onen)m(t)33 b Fs(X)40 b Fu(di\013eren)m(t)33
b(from)e Fs(C)40 b Fu(is)32 b(inserted)h(to)f Fr(Suc)-5
b(c)p Fu(\()p Fs(C)7 b Fu(\))32 b(i\013)g Fs(X)40 b Fu(is)32
b(a)g(successor)j(of)d Fs(C)7 b Fu(.)98 3534 y Fr(Only)29
b(if:)45 b Fu(When)27 b Fq(st)-7 b(a)n(ck)p 1028 3534
V 40 w(tc)26 b Fu(is)f(pro)s(cessing)i(an)f(edge)g(\()p
Fs(v)t(;)17 b(w)s Fu(\),)27 b(where)g Fs(v)j Fu(is)25
b(in)h Fs(C)7 b Fu(,)27 b(it)e(inserts)i Fr(Comp)o Fu(\()p
Fs(w)s Fu(\))98 3668 y(in)m(to)35 b Fr(cstack)g Fu(i\013)g(\()p
Fs(v)t(;)17 b(w)s Fu(\))34 b(is)h(an)h(in)m(tercomp)s(onen)m(t)f(tree)h
(or)f(cross)i(edge.)53 b(Th)m(us,)38 b(eac)m(h)e(comp)s(onen)m(t)g(in-)
98 3802 y(serted)f(in)m(to)d Fr(cstack)h Fu(during)g(the)h(pro)s
(cessing)f(of)g(edges)h(lea)m(ving)f Fs(C)40 b Fu(is)33
b(adjacen)m(t)h(from)e Fs(C)7 b Fu(.)45 b(All)32 b(com-)98
3935 y(p)s(onen)m(ts)g(that)e(are)g(visited)g(during)f(the)i(detection)
f(of)g Fs(C)37 b Fu(m)m(ust)30 b(b)s(e)h(at)f(some)g(lev)m(el)f(b)s
(elo)m(w)i Fs(l)r Fu(,)g(and)f(are)98 4069 y(hence)24
b(correctly)f(detected.)41 b(Th)m(us,)26 b(when)e(all)c(edges)k(lea)m
(ving)d(the)i(ro)s(ot)e Fs(r)k Fu(are)e(pro)s(cessed,)j
Fr(cstack)c Fu(con-)98 4203 y(tains)31 b(no)f(other)h(comp)s(onen)m(ts)
h(ab)s(o)m(v)m(e)f Fr(Save)-5 b(dHeight)p Fu(\()p Fs(r)s
Fu(\).)42 b(Sorting)30 b Fr(cstack)g Fu(b)s(et)m(w)m(een)j
Fr(Save)-5 b(dHeight)o Fu(\()p Fs(r)s Fu(\))98 4336 y(and)35
b Fq(height)o Fu(\()p Fr(cstack)p Fu(\))f(in)m(to)f(a)i(top)s(ological)
30 b(order)35 b(and)f(eliminating)c(duplicates)k(do)s(es)h(not)f(c)m
(hange)98 4470 y(the)j(situation.)55 b(Th)m(us,)39 b(eac)m(h)f(comp)s
(onen)m(t)e(that)h(is)f(remo)m(v)m(ed)i(from)d Fr(cstack)h
Fu(at)g(line)g(23)g(is)g(adjacen)m(t)98 4603 y(from)c
Fs(C)7 b Fu(,)32 b(and)h(eac)m(h)g(comp)s(onen)m(t)g(that)f(is)g(added)
i(in)m(to)d Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))32
b(at)h(line)e(24)h(is)g(a)g(successor)j(of)d Fs(C)7 b
Fu(.)98 4764 y Fr(If:)76 b Fu(Let)46 b Fs(X)59 b Fh(6)p
Fu(=)51 b Fs(C)i Fu(b)s(e)47 b(a)f(successor)i(of)e Fs(C)7
b Fu(.)85 b(If)46 b(a)g(tree)h(or)f(cross)h(edge)g(\()p
Fs(v)t(;)17 b(w)s Fu(\))45 b(leads)h(from)f Fs(C)53 b
Fu(to)98 4898 y Fs(X)8 b Fu(,)42 b Fq(st)-7 b(a)n(ck)p
542 4898 V 39 w(tc)40 b Fu(inserts)h Fs(X)47 b Fu(in)m(to)39
b Fr(cstack)h Fu(ab)s(o)m(v)m(e)h Fr(Save)-5 b(dHeight)o
Fu(\()p Fs(r)s Fu(\))39 b(at)h(line)f(13.)65 b(When)41
b Fq(st)-7 b(a)n(ck)p 3726 4898 V 39 w(tc)98 5031 y Fu(has)38
b(sorted)f Fr(cstack)g Fu(and)g(eliminated)d(duplicates,)k
Fr(cstack)f Fu(con)m(tains)g(one)g(o)s(ccurrence)i(of)d
Fs(X)45 b Fu(ab)s(o)m(v)m(e)98 5165 y Fr(Save)-5 b(dHeight)p
Fu(\()p Fs(r)s Fu(\).)65 b(Th)m(us,)43 b Fq(st)-7 b(a)n(ck)p
1396 5165 V 40 w(tc)39 b Fu(remo)m(v)m(es)i Fs(X)48 b
Fu(at)39 b(line)g(23)g(and)h(inserts)h(it)e(in)m(to)g
Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)65 b(If)98 5298
y(no)34 b(tree)g(or)g(cross)h(edge)f(\()p Fs(v)t(;)17
b(w)s Fu(\))33 b(leads)h(from)e Fs(C)41 b Fu(to)33 b
Fs(X)8 b Fu(,)35 b(another)e(comp)s(onen)m(t)h Fs(Y)55
b Fu(exists)35 b(suc)m(h)g(that)f(a)98 5432 y(tree)k(of)f(cross)h(edge)
g(\()p Fs(u;)17 b(y)t Fu(\))35 b(leads)i(from)f Fs(C)45
b Fu(to)37 b Fs(Y)21 b Fu(,)38 b(and)g Fs(X)45 b Fu(is)36
b(a)h(successor)j(of)d Fs(Y)21 b Fu(.)58 b(Since)37 b
Fs(Y)58 b Fu(is)37 b(at)g(a)98 5566 y(lev)m(el)32 b(b)s(elo)m(w)g
Fs(l)r Fu(,)h Fr(Suc)-5 b(c)p Fu(\()p Fs(Y)21 b Fu(\))32
b(is)g(correctly)g(computed)h(and)f(therefore)h(con)m(tains)f
Fs(X)8 b Fu(.)43 b(When)34 b Fq(st)-7 b(a)n(ck)p 3726
5566 V 39 w(tc)98 5699 y Fu(pro)s(cesses)39 b(edge)f(\()p
Fs(u;)17 b(y)t Fu(\),)36 b(it)f(inserts)j Fs(Y)58 b Fu(on)m(to)36
b Fr(cstack)p Fu(.)56 b(When)38 b Fs(C)44 b Fu(is)36
b(detected,)k Fq(st)-7 b(a)n(ck)p 3350 5699 V 39 w(tc)37
b Fu(remo)m(v)m(es)98 5833 y Fs(Y)54 b Fu(from)31 b Fr(cstack)h
Fu(and)h(adds)g Fr(Suc)-5 b(c)p Fu(\()p Fs(Y)21 b Fu(\),)33
b(whic)m(h)g(con)m(tains)g Fs(X)8 b Fu(,)32 b(in)m(to)g
Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\).)p 2975 5833 4
67 v 2979 5770 59 4 v 2979 5833 V 3036 5833 4 67 v eop
64 29 bop -116 -294 a Fu(64)-116 18 y Fj(Theorem)36 b(3.17.)d
Fu(Algorithm)d Fq(st)-7 b(a)n(ck)p 1376 18 34 4 v 39
w(tc)32 b Fu(runs)h(in)f Fs(O)s Fu(\()p Fs(sZ)7 b Fu(\()p
Fs(n)p Fu(\))20 b(+)p 2377 -34 46 4 v 22 w Fs(eF)14 b
Fu(\()p Fs(n)p Fu(\))21 b(+)p 2752 -34 V 22 w Fs(e)2797
33 y Fe(r)2835 18 y Fu(\()p Fs(I)8 b Fu(\()p Fs(n)p Fu(\))21
b(+)h Fs(U)10 b Fu(\()p Fs(n)p Fu(\)\))22 b(+)f(min)o(\()p
Fs(ns;)-116 152 y(e)-71 167 y Fe(oct)40 152 y Fu(log)16
b Fs(n)p Fu(\)\))40 b(time)d(in)h(the)i(w)m(orst)g(case.)63
b(Here)40 b Fs(n)p Fu(,)h Fs(e)p Fu(,)g(and)e Fs(s)g
Fu(are)g(the)g(n)m(um)m(b)s(er)h(of)e(v)m(ertices,)k(the)d(n)m(um)m(b)s
(er)-116 286 y(of)44 b(edges,)49 b(and)c(the)g(n)m(um)m(b)s(er)g(of)f
(strong)h(comp)s(onen)m(ts)g(in)f(the)h(input)f(graph)h
Fs(G)p Fu(,)i(resp)s(ectiv)m(ely)-8 b(,)49 b Fs(e)3671
301 y Fe(oct)3810 286 y Fu(is)-116 419 y(the)c(n)m(um)m(b)s(er)g(of)f
(in)m(tercomp)s(onen)m(t)g(tree)h(and)g(cross)g(edges)h(in)e
Fs(G)p Fu(,)p 2472 366 V 47 w Fs(e)h Fu(is)f(the)h(n)m(um)m(b)s(er)g
(of)f(edges)i(in)d(the)-116 553 y(condensation)d(graph)p
762 475 77 4 v 41 w Fs(G)g Fu(induced)h(b)m(y)g(the)g(comp)s(onen)m(ts)
g(of)f Fs(G)g Fu(\(with)g(the)h(self-lo)s(op)d(edges)k(remo)m(v)m
(ed\),)-116 686 y(and)p 63 634 46 4 v 22 w Fs(e)109 701
y Fe(r)169 686 y Fu(is)22 b(the)h(n)m(um)m(b)s(er)g(of)f(edges)i(in)e
(the)h(transitiv)m(e)f(reduction)g(of)p 2322 608 77 4
v 22 w Fs(G)h Fu(\(with)f(the)h(self-lo)s(op)d(edges)k(remo)m(v)m
(ed\).)-116 919 y Fj(Pro)s(of.)122 b Fu(Sorting)41 b
Fs(x)i Fu(comp)s(onen)m(ts)g(on)f Fr(cstack)g Fu(in)g(the)h(w)m(a)m(y)h
(w)m(e)f(describ)s(ed)h(ab)s(o)m(v)m(e)f(tak)m(es)h Fs(O)s
Fu(\(min)n(\()p Fs(x)29 b Fu(+)-116 1053 y Fs(n;)17 b(x)g
Fu(log)f Fs(x)p Fu(\)\))31 b(time)f(in)g(the)h(w)m(orst)h(case.)43
b(Let)31 b(\005)g(b)s(e)g(the)g(set)h(of)e(strong)h(comp)s(onen)m(ts)g
(in)f Fs(G)p Fu(.)43 b(Let)31 b Fs(x)3519 1068 y Fe(C)3609
1053 y Fu(b)s(e)g(the)-116 1186 y(n)m(um)m(b)s(er)39
b(of)f(comp)s(onen)m(ts)h(on)f Fr(cstack)g Fu(b)s(et)m(w)m(een)j(the)d
(top)h(and)f Fr(Save)-5 b(dHeight)p Fu(\()p Fs(r)s Fu(\))38
b(when)h(a)f(comp)s(onen)m(t)h Fs(C)-116 1320 y Fu(with)27
b(ro)s(ot)g Fs(r)j Fu(is)e(detected.)43 b(This)28 b(is)f(also)g(the)h
(n)m(um)m(b)s(er)g(of)g(in)m(tercomp)s(onen)m(t)f(tree)h(and)g(cross)h
(edges)g(lea)m(ving)-116 1454 y(the)k(mem)m(b)s(ers)f(of)g(comp)s(onen)
m(t)h Fs(C)7 b Fu(.)43 b(Th)m(us,)1496 1387 y Fd(P)1583
1474 y Fe(C)5 b Ff(2)p Fi(\005)1759 1454 y Fs(x)1814
1469 y Fe(C)1901 1454 y Fu(=)28 b Fs(e)2050 1469 y Fe(oct)2144
1454 y Fu(.)44 b(The)33 b(total)e(time)g(needed)j(for)f(sorting)e(is)
128 1738 y Fs(T)185 1753 y Fi(sort)390 1738 y Fu(=)83
b Fs(O)s Fu(\()682 1655 y Fd(X)665 1838 y Fe(C)5 b Ff(2)p
Fi(\005)836 1738 y Fu(min)n(\()p Fs(x)1091 1753 y Fe(C)1173
1738 y Fu(+)22 b Fs(n;)17 b(x)1428 1753 y Fe(C)1504 1738
y Fu(log)g Fs(x)1702 1753 y Fe(C)1761 1738 y Fu(\)\))390
1975 y(=)83 b Fs(O)s Fu(\(min)n(\()882 1892 y Fd(X)865
2076 y Fe(C)5 b Ff(2)p Fi(\005)1020 1975 y Fu(\()p Fs(x)1113
1990 y Fe(C)1194 1975 y Fu(+)22 b Fs(n)p Fu(\))p Fs(;)1450
1892 y Fd(X)1432 2076 y Fe(C)5 b Ff(2)p Fi(\005)1604
1975 y Fs(x)1659 1990 y Fe(C)1735 1975 y Fu(log)16 b
Fs(x)1932 1990 y Fe(C)1992 1975 y Fu(\)\))390 2213 y(=)83
b Fs(O)s Fu(\(min)n(\()p Fs(e)910 2228 y Fe(oct)1026
2213 y Fu(+)22 b Fs(sn;)1290 2130 y Fd(X)1272 2314 y
Fe(C)5 b Ff(2)p Fi(\005)1444 2213 y Fs(x)1499 2228 y
Fe(C)1575 2213 y Fu(log)17 b Fs(x)1773 2228 y Fe(C)1832
2213 y Fu(\)\))-116 2564 y(Since)32 b Fs(x)193 2579 y
Fe(C)281 2564 y Fh(\024)c Fs(e)33 b Fu(and)f(log)17 b
Fs(e)28 b Fh(\024)g Fu(log)17 b Fs(n)1175 2528 y Fi(2)1242
2564 y Fu(=)27 b(2)17 b(log)f Fs(n)p Fu(,)33 b(w)m(e)h(get)128
2848 y Fs(T)185 2863 y Fi(sort)390 2848 y Fu(=)83 b Fs(O)s
Fu(\()p Fs(e)710 2863 y Fe(oct)826 2848 y Fu(+)22 b Fs(sn;)1089
2765 y Fd(X)1072 2949 y Fe(C)5 b Ff(2)p Fi(\005)1243
2848 y Fs(x)1298 2863 y Fe(C)1374 2848 y Fu(log)17 b
Fs(e)p Fu(\))390 3069 y(=)83 b Fs(O)s Fu(\(min)n(\()p
Fs(e)910 3084 y Fe(oct)1026 3069 y Fu(+)22 b Fs(sn;)17
b(e)1317 3084 y Fe(oct)1428 3069 y Fu(log)g Fs(n)p Fu(\)\))-116
3354 y(The)26 b(sorting)e(remo)m(v)m(es)j(all)c(duplicates)h(from)g
Fr(cstack)p Fu(.)41 b(The)26 b(total)e(n)m(um)m(b)s(er)h(of)g(comp)s
(onen)m(ts)h(that)f(remain)e(is)-116 3487 y(at)k(most)p
232 3434 46 4 v 27 w Fs(e)p Fu(,)h(since)g(eac)m(h)h(remaining)c(comp)s
(onen)m(t)i(is)g(adjacen)m(t)h(from)e Fs(C)7 b Fu(.)42
b(These)29 b(comp)s(onen)m(ts)f(are)f(scanned)-116 3621
y(at)33 b(lines)f(22{25)g(and)i(the)g(presence)h(of)e(the)h(comp)s
(onen)m(ts)f(in)g Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))33
b(is)g(tested.)47 b(This)33 b(tak)m(es)i Fs(O)s Fu(\()p
3583 3568 V Fs(e)o(F)14 b Fu(\()p Fs(n)p Fu(\)\))-116
3754 y(total)32 b(time.)45 b(Since)34 b(the)g(comp)s(onen)m(ts)g(are)f
(scanned)j(in)c(a)i(top)s(ological)c(order,)k(eac)m(h)g(comp)s(onen)m
(t)g Fs(X)41 b Fu(that)-116 3888 y(satis\014es)33 b(the)g(test)h
Fs(X)i Fh(62)28 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))32
b(at)h(line)e(24)h(is)g(the)i(target)e(of)g(an)h(edge)g(in)f(the)h
(transitiv)m(e)g(reduction)f(of)-116 4022 y(the)g(condensation)h(graph)
p 913 3944 77 4 v 32 w Fs(G)p Fu(.)43 b(T)-8 b(o)33 b(see)g(this,)f
(supp)s(ose)i(on)e(the)h(con)m(trary)g(that)f(a)g(comp)s(onen)m(t)g
Fs(X)40 b Fu(satis\014es)-116 4155 y(the)30 b(test)h(and)g(edge)g(\()p
Fs(C)r(;)17 b(X)8 b Fu(\))29 b(is)h(not)g(in)f(the)i(transitiv)m(e)f
(reduction)g(of)p 2471 4077 V 30 w Fs(G)p Fu(.)43 b(By)30
b(the)h(de\014nition)e(of)h(transitiv)m(e)-116 4289 y(reduction,)36
b(edge)g(\()p Fs(C)r(;)17 b(X)8 b Fu(\))35 b(can)h(b)s(e)f(remo)m(v)m
(ed)i(from)p 1830 4211 V 34 w Fs(G)f Fu(without)f(c)m(hanging)g(the)h
(transitiv)m(e)f(closure)h(of)p 3772 4211 V 35 w Fs(G)p
Fu(.)-116 4423 y(Th)m(us,)p 157 4345 V 33 w Fs(G)31 b
Fu(con)m(tains)g(another)g(path)h Fs(p)27 b Fu(:)h Fs(C)1459
4369 y Fi(+)1437 4423 y Fh(!)p Fs(X)8 b Fu(,)31 b(whic)m(h)h(consists)g
(of)e(at)h(least)g(t)m(w)m(o)h(edges.)44 b(Since)31 b(all)e(paths)-116
4556 y(in)p -5 4478 V 29 w Fs(G)i Fu(are)f(top)s(ologically)c(ordered,)
32 b(the)f(\014rst)f(edge)h(of)f Fs(p)h Fu(leads)f(to)g(a)g(comp)s
(onen)m(t)g Fs(Y)52 b Fu(that)30 b(is)g(top)s(ologically)-116
4690 y(smaller)23 b(than)i Fs(X)8 b Fu(.)40 b(This)25
b(implies)e(that)i Fs(Y)46 b Fu(is)24 b(remo)m(v)m(ed)i(from)e
Fr(cstack)o Fu(,)j(and)e Fs(Y)46 b Fu(and)25 b Fr(Suc)-5
b(c)p Fu(\()p Fs(Y)21 b Fu(\))k(are)g(added)h(in)m(to)-116
4823 y Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))30 b(b)s(efore)g
Fs(X)38 b Fu(is)30 b(remo)m(v)m(ed)h(from)f Fr(cstack)o
Fu(.)43 b(But)30 b(since)h Fs(X)38 b Fu(is)30 b(in)g
Fr(Suc)-5 b(c)p Fu(\()p Fs(Y)21 b Fu(\),)31 b Fs(X)38
b Fu(is)30 b(already)g(in)f Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7
b Fu(\))-116 4957 y(when)43 b Fs(X)50 b Fu(is)42 b(remo)m(v)m(ed)h
(from)d Fr(cstack)p Fu(,)45 b(and)d(the)g(test)h Fs(X)52
b Fh(62)44 b Fr(Suc)-5 b(c)p Fu(\()p Fs(C)7 b Fu(\))42
b(fails,)h(whic)m(h)f(is)g(a)g(con)m(tradiction.)-116
5091 y(Th)m(us,)i(the)d(n)m(um)m(b)s(er)g(of)f(comp)s(onen)m(ts)h(that)
f(satisfy)g(the)h(test)g(at)g(line)e(24,)j(and)e(therefore)i(the)e(n)m
(um)m(b)s(er)-116 5224 y(of)k(insertion)f(and)h(union)g(op)s(erations,)
j(is)c(at)h(most)p 1912 5171 46 4 v 44 w Fs(e)1957 5239
y Fe(r)1995 5224 y Fu(.)79 b(The)45 b(insertion)e(and)i(union)f(op)s
(erations)f(tak)m(e)-116 5358 y Fs(O)s Fu(\()p 0 5305
V Fs(e)44 5373 y Fe(r)82 5358 y Fu(\()p Fs(I)8 b Fu(\()p
Fs(n)p Fu(\))22 b(+)g Fs(U)10 b Fu(\()p Fs(n)p Fu(\)\)\))33
b(total)e(time.)p 1237 5358 4 67 v 1241 5295 59 4 v 1241
5358 V 1299 5358 4 67 v -116 5591 a Fj(Corollary)37 b(3.18.)83
b Fu(If)34 b(the)g(successor)j(sets)e(are)f(implemen)m(ted)f(as)h
(unordered)h(lists)e(augmen)m(ted)h(with)g(a)-116 5724
y(bit)j(v)m(ector)j(for)e(mem)m(b)s(ership)g(lo)s(okups,)i(algorithm)35
b Fq(st)-7 b(a)n(ck)p 2178 5724 34 4 v 40 w(tc)38 b Fu(runs)h(in)f
Fs(O)s Fu(\()p Fs(n)p 2884 5671 46 4 v(e)2928 5739 y
Fe(r)2993 5724 y Fu(+)26 b(min)n(\()p Fs(ns;)17 b(e)3488
5739 y Fe(oct)3599 5724 y Fu(log)g Fs(n)p Fu(\)\))-116
5858 y(time)31 b(in)h(the)h(w)m(orst)g(case.)p eop
65 30 bop 3778 -294 a Fu(65)30 18 y(In)43 b(the)g(unordered)g(list)e
(represen)m(tation)i(augmen)m(ted)g(with)f(a)g(bit)g(v)m(ector,)k(w)m
(e)e(need)f(only)f(one)h(bit)-116 152 y(v)m(ector,)34
b(since)f(at)f(most)g(one)h(successor)i(set)e(is)f(under)h
(construction)g(at)f(an)m(y)i(momen)m(t.)30 289 y(Note)e(that)f
(sorting)g(the)h(comp)s(onen)m(ts)g(on)f Fr(cstack)h
Fu(slo)m(ws)g(the)g(execution)g(only)f(b)m(y)i(a)e(term)g(min)n(\()p
Fs(e)3685 304 y Fe(oct)3800 289 y Fu(+)-116 422 y Fs(sn;)17
b(e)77 437 y Fe(oct)188 422 y Fu(log)f Fs(n)p Fu(\),)29
b(whic)m(h)g(is)e(usually)g(negligible)e(compared)j(to)g(the)g(other)g
(terms)g(in)f(the)h(w)m(orst-case)i(b)s(ound.)-116 556
y(Note)i(also)g(that)g(min)o(\()p Fs(ns;)17 b(e)920 571
y Fe(oct)1031 556 y Fu(log)g Fs(n)p Fu(\))27 b Fh(\024)i
Fs(n)1461 520 y Fi(2)1500 556 y Fu(.)-116 929 y Ft(3.5)160
b(Comparisons)52 b(with)i(previous)f(algorithms)-116
1168 y Fu(W)-8 b(e)25 b(ha)m(v)m(e)h(men)m(tioned)f(some)f(prop)s
(erties)h(of)f(the)i(previous)f(transitiv)m(e)f(closure)h(algorithms)d
(that)j(are)g(based)-116 1302 y(on)i(strong)h(comp)s(onen)m(t)g
(detection)g([36,)f(40,)h(62)o(,)g(64,)f(91,)h(101)o(,)g(105)o(].)42
b(No)m(w)28 b(w)m(e)h(describ)s(e)g(these)g(algorithms)-116
1435 y(more)36 b(thoroughly)f(and)i(compare)f(them)g(analytically)e
(with)i(our)g(new)i(algorithms.)52 b(In)37 b(Chapter)h(5,)f(w)m(e)-116
1569 y(compare)32 b(the)h(previous)g(algorithms)d(with)i(our)g(new)i
(algorithms)c(exp)s(erimen)m(tally)-8 b(.)30 1706 y(W)g(e)32
b(start)f(b)m(y)h(describing)f(those)h(algorithms)c(that)j(compute)g
(the)h(successor)h(sets)g(during)d(the)i(strong)-116
1839 y(comp)s(onen)m(t)37 b(detection)h([36,)g(40)o(,)g(64)o(].)59
b(These)40 b(algorithms)34 b(generate)39 b(a)e(partial)e(successor)40
b(set)f(for)e(eac)m(h)-116 1973 y(v)m(ertex)26 b(that)f(is)f(the)i
(tail)c(of)j(an)f(edge.)42 b(A)25 b(common)e(w)m(eakness)28
b(in)c(these)i(algorithms)c(compared)j(to)f(our)h(new)-116
2107 y(algorithms)h(is)i(that)h(they)g(build)f(the)h(successor)i(sets)f
(from)e(v)m(ertices)h(and)g(not)g(from)e(strong)i(comp)s(onen)m(ts.)
-116 2240 y(Our)43 b(algorithm)e Fq(cr)p 677 2240 34
4 v 39 w(tc)p Fu(,)46 b(whic)m(h)e(also)f(constructs)i(the)f(successor)
i(sets)f(during)e(the)h(detection)f(of)g(the)-116 2374
y(comp)s(onen)m(ts,)32 b(usually)e(generates)j(few)m(er)f(partial)d
(successor)34 b(sets)f(than)e(the)h(previous)f(algorithms,)e(since)-116
2507 y Fq(cr)p 10 2507 V 39 w(tc)k Fu(uses)h Fr(Suc)-5
b(c)o Fu(\()p Fr(R)g(o)g(ot)p Fu(\()p Fs(v)t Fu(\)\))33
b(instead)f(of)g Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t Fu(\))32
b(as)h(the)g(target)f(of)g(the)h(insertions.)30 2644
y(The)38 b(oldest)e(of)g(these)i(algorithms)c(is)i(Ev)m(e's)i(and)f
(Kurki-Suonio's)f(algorithm)d([40],)k(whic)m(h)g(w)m(e)h(here)-116
2778 y(call)22 b Fq(eks)p Fu(,)k(for)e(short.)41 b(In)24
b Fq(eks)p Fu(,)i(the)f(partial)d(successor)27 b(set)e(of)e(a)h(v)m
(ertex)j Fs(v)h Fu(con)m(tains)c(the)h(heads)g(of)f(the)h(edges)-116
2912 y(lea)m(ving)k Fs(v)34 b Fu(and)d(the)g(successors)i(of)d(the)h
(heads)g(of)f(the)h(in)m(tercomp)s(onen)m(t)f(edges)h(lea)m(ving)f
Fs(v)t Fu(.)42 b Fq(eks)30 b Fu(do)s(es)h(not)-116 3045
y(propagate)26 b(the)h(partial)d(successor)29 b(sets)e(via)f(in)m
(tracomp)s(onen)m(t)g(edges)h(to)m(w)m(ards)h(the)f(ro)s(ot)e(v)m
(ertex;)31 b(instead,)-116 3179 y(when)i Fq(eks)e Fu(has)i(detected)g
(a)f(comp)s(onen)m(t)g Fs(C)7 b Fu(,)32 b(it)f(unions)h(the)g(partial)e
(successor)k(sets)g(of)d(the)h(mem)m(b)s(ers)g(of)-116
3312 y Fs(C)38 b Fu(to)30 b(get)h Fr(Suc)-5 b(c)p Fu(\()p
Fs(C)7 b Fu(\).)43 b(A)31 b(w)m(eakness)j(in)c Fq(eks)g
Fu(is)h(that)g(it)f(do)s(es)h(not)g(ignore)f(in)m(tercomp)s(onen)m(t)h
(forw)m(ard)g(edges)-116 3446 y(and)j(do)s(es)h(not)f(c)m(hec)m(k)j(if)
c(a)h(successor)j(set)e Fs(S)1546 3461 y Fi(1)1620 3446
y Fu(is)e(already)h(presen)m(t)i(in)e(the)h(successor)h(set)g
Fs(S)3327 3461 y Fi(2)3366 3446 y Fu(,)f(where)g Fq(eks)-116
3580 y Fu(is)30 b(adding)g Fs(S)358 3595 y Fi(1)397 3580
y Fu(.)43 b(This)30 b(leads)h(to)f(unnecessary)j(union)d(op)s
(erations.)42 b(Inserting)31 b(the)g(heads)g(of)f(all)f(edges)j(in)m
(to)-116 3713 y(the)h(partial)d(successor)35 b(sets)f(of)e(their)g
(tails)f(yields)h(unnecessary)j(insertions.)30 3850 y(Eb)s(ert's)30
b(algorithm)c([36],)k(whic)m(h)f(w)m(e)h(here)g(call)d
Fq(eber)-7 b(t)o Fu(,)30 b(resem)m(bles)g Fq(simple)p
2907 3850 V 39 w(tc)p Fu(.)42 b(The)30 b(impro)m(v)m(emen)m(t)-116
3984 y(in)25 b Fq(eber)-7 b(t)25 b Fu(compared)g(to)h
Fq(simple)p 1168 3984 V 39 w(tc)f Fu(and)h Fq(eks)g Fu(is)f(that)g
Fq(eber)-7 b(t)25 b Fu(do)s(es)i(not)e(use)i(in)m(tercomp)s(onen)m(t)f
(forw)m(ard)-116 4117 y(edges)32 b(to)f(propagate)g(successor)i(sets.)
44 b(Apart)31 b(from)f(this)h(optimization,)d Fq(eber)-7
b(t)30 b Fu(su\013ers)j(from)c(the)j(same)-116 4251 y(w)m(eaknesses)42
b(as)d Fq(eks)p Fu(.)62 b(Propagating)37 b(the)i(partial)e(successor)k
(sets)f(via)e(in)m(tracomp)s(onen)m(t)g(tree)h(edges)h(to)-116
4385 y(the)e(ro)s(ot)e(v)m(ertex)k(pro)s(duces)e(the)g(same)f(result)h
(as)g(unioning)e(all)f(partial)g(successor)40 b(sets)f(of)e(comp)s
(onen)m(t)-116 4518 y(mem)m(b)s(ers)32 b(in)g Fq(eks)o
Fu(.)30 4655 y(The)i(most)f(recen)m(t)h(algorithm)c(that)j(computes)h
(the)g(successor)h(sets)f(during)f(the)h(strong)f(comp)s(onen)m(t)-116
4789 y(detection)23 b(is)g(the)h(algorithm)d Fq(gdftc)i
Fu(b)m(y)i(Ioannidis,)f(Ramakrishnan,)h(and)e(Winger)g([64].)41
b(The)24 b(algorithm)-116 4922 y(is)34 b(based)i(on)f(a)g(complicated)f
(stac)m(k)i(mec)m(hanism)e(that)h(con)m(tains)g(t)m(w)m(o)h(kinds)g(of)
e(data:)49 b(in)m(tracomp)s(onen)m(t)-116 5056 y(successor)f(lists)d
(and)h(in)m(tercomp)s(onen)m(t)g(successor)i(lists.)83
b(Lik)m(e)46 b Fq(eber)-7 b(t)o Fu(,)50 b Fq(gdftc)c
Fu(adds)h Fr(Suc)-5 b(c)o Fu(\()p Fs(w)s Fu(\))46 b(in)m(to)-116
5190 y Fr(Suc)-5 b(c)p Fu(\()p Fs(v)t Fu(\))27 b(if)g(\()p
Fs(v)t(;)17 b(w)s Fu(\))27 b(is)h(an)g(in)m(tercomp)s(onen)m(t)g(tree)h
(or)e(cross)i(edge.)43 b(If)28 b(\()p Fs(v)t(;)17 b(w)s
Fu(\))27 b(is)h(a)g(bac)m(k)h(edge,)h Fq(gdftc)e Fu(stores)-116
5323 y(a)h(new)h(stac)m(k)g(frame)e(on)h(top)g(of)g(the)g(stac)m(k.)44
b(Successors)32 b(are)d(later)f(added)i(in)m(to)e(the)i(new)g(frame.)41
b(If)29 b(\()p Fs(v)t(;)17 b(w)s Fu(\))-116 5457 y(is)28
b(an)h(in)m(tracomp)s(onen)m(t)f(tree)i(edge)f(and)g
Fs(v)k Fu(is)28 b(the)i(target)e(of)h(a)g(previously)g(pro)s(cessed)h
(bac)m(k)g(edge,)h Fq(gdftc)-116 5591 y Fu(merges)38
b(the)g(t)m(w)m(o)h(topmost)e(stac)m(k)i(frames.)60 b(If)38
b(\()p Fs(v)t(;)17 b(w)s Fu(\))36 b(is)i(an)g(in)m(tracomp)s(onen)m(t)f
(tree)h(edge)h(and)f Fs(v)k Fu(is)37 b(not)-116 5724
y(the)e(target)f(of)g(a)g(previously)g(pro)s(cessed)j(bac)m(k)e(edge,)h
Fq(gdftc)f Fu(adds)g Fr(Suc)-5 b(c)o Fu(\()p Fs(v)t Fu(\))34
b(in)m(to)g(the)h(in)m(tercomp)s(onen)m(t)-116 5858 y(successor)k(list)
c(of)h(the)g(topmost)g(stac)m(k)i(frame)e(and)g Fs(v)k
Fu(in)m(to)c(the)h(in)m(tracomp)s(onen)m(t)f(successor)i(list)d(of)h
(the)p eop
66 31 bop -116 -294 a Fu(66)-116 18 y(topmost)43 b(stac)m(k)j(frame.)77
b(Unlik)m(e)44 b Fq(eber)-7 b(t)o Fu(,)47 b Fq(gdftc)e
Fu(do)s(es)f(not)g(insert)h(the)f(head)h(of)f(eac)m(h)h(edge)g(to)e
(the)-116 152 y(successor)38 b(set)e(of)f(the)g(tail)f(of)h(the)g
(edge.)53 b(This)36 b(seems)g(to)f(b)s(e)h(the)f(only)g(impro)m(v)m
(emen)m(t.)52 b(Unfortunately)-8 b(,)-116 286 y(the)41
b(stac)m(k)h(mec)m(hanism)e(is)g(exp)s(ensiv)m(e.)70
b(In)41 b(the)h(exp)s(erimen)m(ts)f(b)m(y)h(Ioannidis)d(et)i(al.)67
b([64],)43 b Fq(gdftc)e Fu(w)m(as)-116 419 y(slo)m(w)m(er)33
b(than)g(Sc)m(hmitz's)f(algorithm)e([105)o(])j(and)f(algorithm)e
Fq(btc)i Fu(b)m(y)h(Ioannidis)f(et)h(al.)30 568 y(The)39
b(second)h(group)e(of)f(the)i(previous)f(algorithms)e(computes)i(the)h
(successor)h(set)f(of)f(a)g(comp)s(onen)m(t)-116 702
y(only)24 b(after)h(detecting)g(the)g(comp)s(onen)m(t)g([105])g(or)f
(after)h(detecting)g(all)e(comp)s(onen)m(ts)j([64)o(,)f(91,)g(101)o(].)
41 b(Except)-116 836 y(for)33 b(the)i(algorithm)30 b
Fq(btc)k Fu([64)o(],)h(these)g(algorithms)c(build)i(the)h(successor)j
(sets)e(from)d(strong)i(comp)s(onen)m(ts)-116 969 y(instead)e(of)g(v)m
(ertices.)30 1119 y(The)42 b(oldest)f(of)f(these)j(algorithms)38
b(is)i(Purdom's)i(algorithm)37 b([101],)43 b(called)d
Fq(purdom)h Fu(here,)j(whic)m(h)-116 1252 y(w)m(e)f(describ)s(ed)g
(already)e(in)h(section)g(2.3.2.)71 b(Although)41 b(the)i(w)m
(orst-case)g(b)s(ound)f(of)g Fq(purdom)g Fu(is)g(go)s(o)s(d,)-116
1386 y Fs(O)s Fu(\()p Fs(n)p 58 1333 46 4 v(e)102 1401
y Fe(r)172 1386 y Fu(+)32 b Fs(n)338 1350 y Fi(2)378
1386 y Fu(\),)51 b(the)c(algorithm)d(has)k(t)m(w)m(o)g(w)m(eaknesses.)
91 b(First,)50 b(the)d(constan)m(t)h(costs)g(are)f(high.)87
b(The)-116 1519 y(algorithm)41 b(is)j(sev)m(en)j(pages)e(of)f(Algol-co)
s(de)e(and)j(consists)g(of)f(four)g(di\013eren)m(t)h(phases.)81
b(The)45 b(graph)f(is)-116 1653 y(scanned)i(sev)m(eral)g(times.)79
b(Second,)50 b(the)45 b(b)s(est-case)h(execution)f(time)f(is)g
Fs(O)s Fu(\()p Fs(n)2882 1617 y Fi(2)2921 1653 y Fu(\).)81
b(This)45 b(is)f(due)i(to)e(the)-116 1787 y(underlying)32
b(Bo)s(olean)f(matrix)g(represen)m(tation.)30 1936 y(Munro's)d
(algorithm)23 b([91],)28 b(called)d Fq(munr)n(o)i Fu(here,)i(di\013ers)
e(from)e(the)i(other)g(algorithms)d(in)h(that)i(it)e(uses)-116
2070 y(matrix)30 b(m)m(ultiplication)d(to)32 b(compute)g(the)g
(transitiv)m(e)g(closure)g(of)f(the)i(condensation)f(graph.)43
b(This)32 b(leads)-116 2203 y(to)41 b(the)g(same)h(w)m(orst-case)g
(execution)g(time)e Fs(O)s Fu(\()p Fs(n)1770 2167 y Fe(\013)1819
2203 y Fu(\))h(as)h(that)f(of)f(the)i(m)m(ultiplication)37
b(of)k(t)m(w)m(o)h(matrices.)-116 2337 y(When)f(the)g(input)f(graph)g
(is)g(acyclic)f(and)i(dense,)j(this)c(is)g(the)g(b)s(est)h(w)m
(orst-case)h(b)s(ound)f(for)e(transitiv)m(e)-116 2470
y(closure)32 b(computation)g(that)g(is)g(kno)m(wn.)45
b(Unfortunately)-8 b(,)32 b(the)h(constan)m(t)h(costs)f(are)g(high.)30
2620 y(Sc)m(hmitz's)45 b(algorithm)c([105)o(],)47 b(called)d
Fq(schmitz)g Fu(here,)k(computes)d(the)f(successor)j(set)e(of)f(a)g
(strong)-116 2753 y(comp)s(onen)m(t)i(immediately)d(after)i(detecting)h
(the)h(comp)s(onen)m(t.)83 b(The)47 b(successor)h(set)f(con)m(tains)f
(strong)-116 2887 y(comp)s(onen)m(ts)j(represen)m(ted)h(b)m(y)g(their)d
(ro)s(ot)h(v)m(ertices.)92 b(When)49 b(a)f(comp)s(onen)m(t)g
Fs(C)55 b Fu(with)48 b(the)h(ro)s(ot)e Fs(r)k Fu(is)-116
3020 y(detected,)34 b Fq(schmitz)f Fu(scans)g(again)f(all)e(edges)k
(lea)m(ving)d(the)i(v)m(ertices)h(of)e(the)h(comp)s(onen)m(t.)44
b(F)-8 b(or)32 b(eac)m(h)h(edge)-116 3154 y(\()p Fs(v)t(;)17
b(w)s Fu(\),)33 b(the)h(algorithm)d(c)m(hec)m(ks)37 b(if)32
b(the)j(ro)s(ot)e(v)m(ertex)i Fs(r)1919 3118 y Ff(0)1976
3154 y Fu(asso)s(ciated)f(with)g Fs(w)i Fu(equals)e Fs(r)j
Fu(or)c(if)g Fs(r)3408 3118 y Ff(0)3465 3154 y Fu(is)g(already)-116
3288 y(in)27 b Fr(Suc)-5 b(c)p Fu(\()p Fs(r)s Fu(\).)41
b(If)28 b(the)h(test)f(fails,)g Fr(Suc)-5 b(c)o Fu(\()p
Fs(r)1322 3252 y Ff(0)1345 3288 y Fu(\))28 b(is)g(added)g(in)m(to)g
Fr(Suc)-5 b(c)o Fu(\()p Fs(r)s Fu(\).)42 b(The)29 b(algorithm)c(alw)m
(a)m(ys)j(inserts)h Fs(r)3660 3252 y Ff(0)3711 3288 y
Fu(in)m(to)-116 3421 y Fr(Suc)-5 b(c)p Fu(\()p Fs(r)s
Fu(\).)53 b(Th)m(us,)39 b Fq(schmitz)d Fu(needs)i Fs(e)e
Fu(insertions)g(whereas)h Fq(st)-7 b(a)n(ck)p 2426 3421
34 4 v 40 w(tc)36 b Fu(needs)h(only)p 3100 3369 46 4
v 36 w Fs(e)3145 3436 y Fe(r)3219 3421 y Fu(insertions.)54
b(The)-116 3555 y(other)32 b(de\014ciency)j(in)c Fq(schmitz)i
Fu(is)f(that)g(it)g(requires)h(t)m(w)m(o)h(passes)g(o)m(v)m(er)f(the)g
(graph.)30 3704 y Fq(schmitz)45 b Fu(usually)g(requires)h(more)f(union)
g(op)s(erations)f(than)h Fq(st)-7 b(a)n(ck)p 2734 3704
34 4 v 40 w(tc)p Fu(.)82 b(Sc)m(hmitz)45 b(presen)m(ted)i(a)-116
3838 y(v)-5 b(arian)m(t)38 b(of)h(his)g(algorithm,)f(whic)m(h)i
(minimizes)d(the)j(n)m(um)m(b)s(er)g(of)f(union)g(op)s(erations)f(b)m
(y)j(computing)d(an)-116 3971 y Fr(e)-5 b(dge)38 b(b)-5
b(asis)44 b Fu(b)s(efore)37 b(computing)e(the)i(successor)i(sets.)57
b(The)38 b(edge)f(basis)g(corresp)s(onds)h(to)e(the)h(transitiv)m(e)
-116 4105 y(reduction)c(of)g(the)i(condensation)e(graph.)47
b(The)34 b(edge)h(basis)e(is)g(computed)h(in)f(the)h(follo)m(wing)d(w)m
(a)m(y:)47 b(when)-116 4239 y(a)35 b(comp)s(onen)m(t)g(is)f(detected,)k
(the)d(algorithm)d(scans)k(the)g(edges)g(lea)m(ving)e(the)i(comp)s
(onen)m(t)f(mem)m(b)s(ers)g(and)-116 4372 y(constructs)45
b(a)e(queue)i(con)m(taining)d(a)i(subset)h(of)e(the)h(ro)s(ots)f(of)g
(the)h(edge)g(heads.)78 b(F)-8 b(or)43 b(an)g(edge)h(\()p
Fs(v)t(;)17 b(w)s Fu(\))-116 4506 y(suc)m(h)34 b(that)f
Fs(w)i Fu(is)d(in)g(another)h(comp)s(onen)m(t,)g(the)h(algorithm)29
b(tests)34 b(whether)h(the)e(queue)h(already)f(con)m(tains)-116
4640 y Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(w)s Fu(\))36 b(or)h(another)g(v)m
(ertex)i Fs(x)e Fu(suc)m(h)h(that)f Fr(R)-5 b(o)g(ot)p
Fu(\()p Fs(w)s Fu(\))37 b(is)f(in)g Fr(Suc)-5 b(c)p Fu(\()p
Fs(x)p Fu(\).)57 b(If)37 b(the)h(test)f(fails,)g(the)g(algorithm)-116
4773 y(inserts)c Fr(R)-5 b(o)g(ot)p Fu(\()p Fs(w)s Fu(\))32
b(in)m(to)g(the)h(queue.)46 b(When)33 b(the)h(queue)g(has)f(b)s(een)h
(constructed,)g(the)f(algorithm)d(scans)k(it)-116 4907
y(again)c(and)i(for)f(eac)m(h)h(\(ro)s(ot\))f(v)m(ertex)i
Fs(x)f Fu(in)f(the)h(queue)h(c)m(hec)m(ks)h(if)c Fs(x)i
Fu(is)f(already)h(in)e Fr(Suc)-5 b(c)p Fu(\()p Fs(r)s
Fu(\),)31 b(the)h(successor)-116 5040 y(set)i(that)g(is)f(b)s(eing)g
(constructed.)49 b(If)34 b Fs(x)g Fu(is)g(not)g(in)f
Fr(Suc)-5 b(c)o Fu(\()p Fs(r)s Fu(\),)34 b(the)g(algorithm)d(adds)k
Fr(Suc)-5 b(c)o Fu(\()p Fs(x)p Fu(\))34 b(in)m(to)f Fr(Suc)-5
b(c)p Fu(\()p Fs(r)s Fu(\).)-116 5174 y(This)38 b(v)-5
b(arian)m(t)38 b(needs)i(only)p 941 5121 46 4 v 38 w
Fs(e)986 5189 y Fe(r)1062 5174 y Fu(union)e(op)s(erations.)60
b(Unfortunately)-8 b(,)39 b(computing)f(the)g(edge)h(basis)g(often)-116
5308 y(costs)33 b(more)f(than)h(it)e(sa)m(v)m(es.)30
5457 y(Ioannidis)j(et)h(al.)49 b([64])35 b(presen)m(ted)i(an)d
(algorithm,)f(called)g Fq(btc)p Fu(,)i(that)g(computes)g(the)g
(successor)j(sets)-116 5591 y(after)c(all)f(strong)i(comp)s(onen)m(ts)g
(ha)m(v)m(e)h(b)s(een)g(detected.)52 b(Strangely)-8 b(,)35
b Fq(btc)f Fu(constructs)i(the)g(successor)h(sets)-116
5724 y(from)f(v)m(ertices)k(instead)e(of)f(strong)h(comp)s(onen)m(ts.)
60 b Fq(btc)38 b Fu(\014rst)g(uses)i(a)d(mo)s(di\014ed)g(T)-8
b(arjan's)38 b(algorithm)d(to)-116 5858 y(detect)d(the)g(strong)f(comp)
s(onen)m(ts)h(and)f(to)g(assign)g(exit)g(n)m(um)m(b)s(ers)i(to)e(the)g
(v)m(ertices.)45 b(Then)32 b Fq(btc)f Fu(pro)s(cesses)p
eop
67 32 bop 3778 -294 a Fu(67)-116 18 y(the)30 b(v)m(ertices)i(in)d(the)i
(exit)f(order)g(and)g(computes)h(the)g(successor)h(sets.)44
b(Since)30 b(the)h(exit)f(order)g(is)g(a)g(rev)m(erse)-116
152 y(top)s(ological)20 b(order)k(if)f(w)m(e)h(omit)e(the)j(bac)m(k)f
(edges,)j(the)e(successor)h(set)e(of)g(a)f(comp)s(onen)m(t)h(can)g(b)s
(e)g(constructed)-116 286 y(b)m(y)45 b(unioning)d(the)i(successor)i
(sets)f(of)f(the)g(adjacen)m(t)g(comp)s(onen)m(ts,)k(whic)m(h)c(are)g
(already)f(constructed.)-116 419 y(Ioannidis)30 b(et)h(al.)41
b([64])31 b(describ)s(ed)h(sev)m(eral)f(optimizations)d(that)j(impro)m
(v)m(e)f(the)i(p)s(erformance)e(of)h Fq(btc)f Fu(in)g(a)-116
553 y(paging)h(en)m(vironmen)m(t.)43 b(F)-8 b(or)32 b(instance,)g(the)h
(adjacency)g(lists)e(can)i(b)s(e)f(top)s(ologically)c(ordered)33
b(during)e(the)-116 686 y(\014rst)h(phase.)44 b(The)32
b(w)m(eaknesses)k(in)30 b Fq(btc)i Fu(are)f(the)h(high)f(constan)m(t)h
(costs)h(and)e(the)h(use)h(of)e(v)m(ertices)i(instead)-116
820 y(of)f(strong)g(comp)s(onen)m(ts)i(as)e(the)h(building)e(blo)s(c)m
(ks)i(of)f(successor)j(sets.)30 954 y(In)29 b(T)-8 b(ables)30
b(3.1)e(and)h(3.2,)h(w)m(e)g(presen)m(t)h(the)e(w)m(orst-case)h
(execution)g(times)e(of)h(the)g(previous)h(algorithms)-116
1087 y(and)k(our)h(new)g(algorithms.)47 b(The)35 b(\014rst)g(table)f
(con)m(tains)h(the)g(implemen)m(tation)c(indep)s(enden)m(t)36
b(w)m(orst-case)-116 1221 y(times)h(and)h(the)h(second)g(table)f(the)g
(corresp)s(onding)g(w)m(orst-case)i(times)d(when)i(bit)f(v)m(ectors,)j
(A)-11 b(VL-trees,)-116 1355 y(or)41 b(lists)f(augmen)m(ted)h(with)g(a)
g(bit)g(v)m(ector)h(are)f(used)i(to)d(implemen)m(t)g(the)h(successor)j
(sets.)71 b(W)-8 b(e)41 b(use)h(the)-116 1488 y(follo)m(wing)30
b(notations)h(in)h(the)h(tables:)184 1687 y Fm(n)117
b Fp(The)30 b(n)m(um)m(b)s(er)f(of)i(v)m(ertices.)196
1832 y Fm(e)118 b Fp(The)30 b(n)m(um)m(b)s(er)f(of)i(edges;)g
Fm(e)25 b Fk(\024)g Fm(n)1464 1799 y Fi(2)1503 1832 y
Fp(.)195 1977 y Fm(s)118 b Fp(The)30 b(n)m(um)m(b)s(er)f(of)i(strong)f
(comp)s(onen)m(ts;)h Fm(s)25 b Fk(\024)g Fm(n)p Fp(.)93
2122 y Fm(s)136 2136 y Fe(cy)r(c)356 2122 y Fp(The)30
b(n)m(um)m(b)s(er)f(of)i(cyclic)f(strong)g(comp)s(onen)m(ts;)h
Fm(s)2075 2136 y Fe(cy)r(c)2202 2122 y Fk(\024)25 b Fm(s)p
Fp(.)p 196 2217 43 4 v 196 2267 a Fm(e)118 b Fp(The)30
b(n)m(um)m(b)s(er)f(of)i(edges)g(in)e(the)h(condensation)g(graph)g
(without)f(the)i(self-lo)s(op)e(edges;)p 3409 2217 V
31 w Fm(e)d Fk(\024)f Fm(e)p Fp(.)p 158 2362 V 158 2411
a Fm(e)200 2425 y Fe(r)356 2411 y Fp(The)34 b(n)m(um)m(b)s(er)g(of)g
(edges)i(in)d(the)i(transitiv)m(e)f(reduction)f(of)i(the)g
(condensation)f(graph)g(without)g(the)356 2537 y(self-lo)s(op)29
b(edges;)p 983 2488 V 31 w Fm(e)1026 2551 y Fe(r)1089
2537 y Fk(\024)p 1185 2488 V 25 w Fm(e)p Fp(.)p 137 2633
V 137 2682 a Fm(e)179 2649 y Fi(+)356 2682 y Fp(The)h(n)m(um)m(b)s(er)f
(of)i(edges)g(in)e(the)h(transitiv)m(e)g(closure)g(of)g(the)h
(condensation)f(graph;)p 3281 2633 V 30 w Fm(e)c Fk(\024)p
3445 2633 V 25 w Fm(e)3487 2649 y Fi(+)3546 2682 y Fp(.)168
2827 y Fm(e)210 2841 y Fe(i)356 2827 y Fp(The)k(n)m(um)m(b)s(er)f(of)i
(in)m(tracomp)s(onen)m(t)f(edges;)h Fm(e)1942 2841 y
Fe(i)1996 2827 y Fk(\024)25 b Fm(e)p Fp(.)158 2971 y
Fm(e)200 2985 y Fe(o)356 2971 y Fp(The)30 b(n)m(um)m(b)s(er)f(of)i(in)m
(tercomp)s(onen)m(t)f(edges;)h Fm(e)1937 2985 y Fe(o)2001
2971 y Fp(=)25 b Fm(e)20 b Fk(\000)g Fm(e)2292 2985 y
Fe(i)2346 2971 y Fk(\024)25 b Fm(e)p Fp(.)132 3116 y
Fm(e)174 3130 y Fe(i)p Fi(1)356 3116 y Fp(The)f(n)m(um)m(b)s(er)g(of)g
(in)m(tracomp)s(onen)m(t)h(tree)g(edges)g(\()p Fm(v)s(;)15
b(w)r Fp(\))27 b(suc)m(h)d(that)h Fm(w)i Fp(is)d(not)g(in)g
Fl(Suc)-5 b(c)o Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p Fm(v)s
Fp(\)\))26 b(when)356 3242 y Fn(btc)k Fp(is)f(c)m(hec)m(king)i(the)g
(edge;)g Fm(e)1435 3256 y Fe(i)p Fi(1)1524 3242 y Fk(\024)25
b Fm(e)1662 3256 y Fe(i)1691 3242 y Fp(.)142 3387 y Fm(e)184
3401 y Fe(it)356 3387 y Fp(The)30 b(n)m(um)m(b)s(er)f(of)i(in)m
(tracomp)s(onen)m(t)f(tree)h(edges;)g Fm(e)2124 3401
y Fe(it)2203 3387 y Fp(=)25 b Fm(n)20 b Fk(\000)g Fm(s)30
b Fp(and)g Fm(e)2757 3401 y Fe(it)2836 3387 y Fk(\024)25
b Fm(e)2974 3401 y Fe(i)3002 3387 y Fp(.)122 3531 y Fm(e)164
3545 y Fe(o)p Fi(1)356 3531 y Fp(The)g(n)m(um)m(b)s(er)e(of)i(in)m
(tercomp)s(onen)m(t)g(tree)h(edges)f(\()p Fm(v)s(;)15
b(w)r Fp(\))27 b(suc)m(h)e(that)g Fm(w)i Fp(is)d(not)i(in)d
Fl(Suc)-5 b(c)p Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p Fm(v)s
Fp(\)\))26 b(when)356 3657 y Fn(btc)k Fp(is)f(c)m(hec)m(king)i(the)g
(edge;)p 1393 3608 V 31 w Fm(e)1436 3671 y Fe(r)1499
3657 y Fk(\024)25 b Fm(e)1637 3671 y Fe(o)p Fi(1)1736
3657 y Fk(\024)g Fm(e)1874 3671 y Fe(o)1912 3657 y Fp(.)122
3802 y Fm(e)164 3816 y Fe(o)p Fi(2)356 3802 y Fp(The)38
b(n)m(um)m(b)s(er)f(of)h(in)m(tercomp)s(onen)m(t)g(edges)g(\()p
Fm(v)s(;)15 b(w)r Fp(\))40 b(suc)m(h)e(that)h Fl(R)-5
b(o)g(ot)r Fp(\()p Fm(w)r Fp(\))39 b(is)e(not)h(in)f
Fl(Suc)-5 b(c)p Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p Fm(v)s
Fp(\)\))356 3927 y(when)30 b Fn(schmitz)f Fp(c)m(hec)m(ks)j(the)e
(edge;)p 1639 3878 V 31 w Fm(e)1682 3941 y Fe(r)1745
3927 y Fk(\024)25 b Fm(e)1883 3941 y Fe(o)p Fi(2)1982
3927 y Fk(\024)g Fm(e)2120 3941 y Fe(o)2159 3927 y Fp(.)101
4072 y Fm(e)143 4086 y Fe(oct)356 4072 y Fp(The)30 b(n)m(um)m(b)s(er)f
(of)i(in)m(tercomp)s(onen)m(t)f(tree)h(and)f(cross)g(edges;)p
2477 4023 V 31 w Fm(e)2520 4086 y Fe(r)2583 4072 y Fk(\024)25
b Fm(e)2721 4086 y Fe(oct)2841 4072 y Fk(\024)g Fm(e)2979
4086 y Fe(o)3017 4072 y Fp(.)66 4217 y Fm(e)108 4231
y Fe(oct)p Fi(1)356 4217 y Fp(The)33 b(n)m(um)m(b)s(er)e(of)i(in)m
(tercomp)s(onen)m(t)g(tree)h(and)e(cross)h(edges)h(\()p
Fm(v)s(;)15 b(w)r Fp(\))34 b(suc)m(h)f(that)h Fl(Comp)q
Fp(\()p Fm(w)r Fp(\))g(is)e(not)h(in)356 4342 y Fl(Suc)-5
b(c)p Fp(\()p Fl(R)g(o)g(ot)s Fp(\()p Fm(v)s Fp(\)\))31
b(at)g(line)e(11)i(in)e Fn(cr)p 1559 4342 31 4 v 36 w(tc)p
Fp(;)p 1752 4293 43 4 v 30 w Fm(e)1794 4356 y Fe(r)1858
4342 y Fk(\024)c Fm(e)1996 4356 y Fe(oct)p Fi(1)2151
4342 y Fk(\024)g Fm(e)2289 4356 y Fe(oct)2383 4342 y
Fp(.)144 4487 y Fm(n)199 4501 y Fi(1)356 4487 y Fp(The)34
b(n)m(um)m(b)s(er)f(of)i(nonro)s(ot)f(v)m(ertices)h(with)e(a)i
(non-empt)m(y)g(partial)e(successor)h(set)h(in)e Fn(cr)p
3480 4487 31 4 v 36 w(tc)p Fp(;)j Fm(n)3734 4501 y Fi(1)3805
4487 y Fk(\024)356 4612 y Fm(n)20 b Fk(\000)g Fm(s)25
b Fp(=)g Fm(e)728 4626 y Fe(it)782 4612 y Fp(.)183 4757
y Fm(\033)356 4693 y Fd(P)444 4780 y Fe(C)5 b Ff(2)p
Fi(\005)618 4693 y Fd(P)706 4780 y Fe(v)r Ff(2)p Fe(C)864
4757 y Fl(Outde)-5 b(g)p Fp(\()p Fm(v)s Fp(\))p Fl(Outde)g(g)q
Fp(\()p Fm(C)7 b Fp(\),)25 b(the)f(time)f(needed)g(to)h(compute)g(the)g
(edge)g(basis)e(in)g(Sc)m(hmitz's)356 4883 y(v)-5 b(arian)m(t)25
b(algorithm.)37 b(Here)25 b(\005)g(is)e(the)i(set)g(of)f(strong)h(comp)
s(onen)m(ts)f(and)g Fl(Outde)-5 b(g)p Fp(\()p Fm(C)7
b Fp(\))25 b(is)e(the)i(outdegree)356 5008 y(of)31 b(comp)s(onen)m(t)f
Fm(C)37 b Fp(in)29 b(the)i(condensation)f(graph)g(\(with)f(the)i
(self-lo)s(op)e(edges)i(remo)m(v)m(ed\).)183 5153 y Fm(\026)118
b Fp(min)o(\()p Fm(ns;)15 b(e)723 5167 y Fe(oct)832 5153
y Fp(log)i Fm(n)p Fp(\),)31 b(the)f(time)g(needed)g(to)h(sort)g(the)f
(comp)s(onen)m(ts)h(in)e Fn(st)-6 b(a)n(ck)p 3096 5153
V 35 w(tc)o Fp(.)188 5298 y Fm(\034)128 b Fp(The)33 b(time)h(needed)f
(to)i(sort)f(the)g(adjacency)g(lists)f(of)h(all)e(v)m(ertices)j(in)d(a)
i(rev)m(erse)h(top)s(ological)e(order)356 5423 y(in)c
Fn(btc)o Fp(.)41 b(The)30 b(sorting)g(metho)s(d)g(is)f(not)i(describ)s
(ed)d(in)h([64)q(].)134 5568 y Fm(n)189 5535 y Fe(\013)356
5568 y Fp(The)h(complexit)m(y)g(of)h(matrix)e(m)m(ultiplication;)f
Fm(\013)e Fk(\024)f Fp(2)p Fm(:)p Fp(376.)44 5713 y Fm(Z)7
b Fp(\()p Fm(n)p Fp(\))118 b(The)30 b(maxim)m(um)f(time)h(of)h
(creating)g(an)f(empt)m(y)h(set)g(that)g(can)f(hold)f
Fm(n)h Fp(elemen)m(ts.)42 5858 y Fm(F)13 b Fp(\()p Fm(n)p
Fp(\))118 b(The)30 b(maxim)m(um)f(time)h(of)h(a)g(mem)m(b)s(ership)d
(test)j(in)e(a)i(set)g(of)f(at)h(most)g Fm(n)f Fp(elemen)m(ts.)p
eop
68 33 bop -116 -294 a Fu(68)p 173 -78 3414 4 v 171 72
4 151 v 223 27 a Fp(Algorithm)p 1254 72 V 675 w(W)-8
b(orst)31 b(case)h(b)s(ound)c Fm(O)s Fp(\(\))p 3585 72
V 173 76 3414 4 v 171 226 4 151 v 223 181 a Fn(simple)p
515 181 31 4 v 35 w(tc)p 1254 226 4 151 v 654 w Fm(nZ)7
b Fp(\()p Fm(n)p Fp(\))19 b(+)h Fm(eI)7 b Fp(\()p Fm(n)p
Fp(\))21 b(+)f Fm(eU)10 b Fp(\()p Fm(n)p Fp(\))p 3585
226 V 173 229 3414 4 v 171 380 4 151 v 223 335 a Fn(eks)p
1254 380 V 932 w Fm(nZ)d Fp(\()p Fm(n)p Fp(\))19 b(+)h
Fm(eI)7 b Fp(\()p Fm(n)p Fp(\))21 b(+)f(\()p Fm(n)g Fk(\000)g
Fm(s)g Fp(+)g Fm(e)2388 349 y Fe(o)2426 335 y Fp(\))p
Fm(U)10 b Fp(\()p Fm(n)p Fp(\))p 3585 380 V 173 383 3414
4 v 171 534 4 151 v 223 488 a Fn(eber)-6 b(t)p 1254 534
V 825 w Fm(nZ)7 b Fp(\()p Fm(n)p Fp(\))19 b(+)h Fm(eI)7
b Fp(\()p Fm(n)p Fp(\))21 b(+)f(\()p Fm(e)2068 502 y
Fe(it)2143 488 y Fp(+)g Fm(e)2276 502 y Fe(oct)2370 488
y Fp(\))p Fm(U)10 b Fp(\()p Fm(n)p Fp(\))p 3585 534 V
173 537 3414 4 v 171 687 4 151 v 223 642 a Fn(gdftc)p
1254 687 V 811 w Fm(nZ)d Fp(\()p Fm(n)p Fp(\))19 b(+)h(\()p
Fm(e)1742 656 y Fe(it)1817 642 y Fp(+)g Fm(e)1950 656
y Fe(oct)2044 642 y Fp(\)\()p Fm(I)7 b Fp(\()p Fm(n)p
Fp(\))22 b(+)e Fm(U)10 b Fp(\()p Fm(n)p Fp(\)\))p 3585
687 V 173 691 3414 4 v 171 841 4 151 v 223 796 a Fn(cr)p
338 796 31 4 v 36 w(tc)p 1254 841 4 151 v 830 w Fm(nZ)d
Fp(\()p Fm(n)p Fp(\))19 b(+)h Fm(e)1707 810 y Fe(oct)1802
796 y Fm(F)13 b Fp(\()p Fm(n)p Fp(\))20 b(+)g(\()p Fm(s)2187
810 y Fe(cy)r(c)2310 796 y Fp(+)g Fm(e)2443 810 y Fe(oct)p
Fi(1)2573 796 y Fp(\))p Fm(I)7 b Fp(\()p Fm(n)p Fp(\))21
b(+)f(\()p Fm(n)2982 810 y Fi(1)3041 796 y Fp(+)g Fm(e)3174
810 y Fe(oct)p Fi(1)3304 796 y Fp(\))p Fm(U)10 b Fp(\()p
Fm(n)p Fp(\))p 3585 841 V 173 844 3414 4 v 171 995 4
151 v 223 950 a Fn(schmitz)p 1254 995 V 736 w Fm(sZ)d
Fp(\()p Fm(n)p Fp(\))19 b(+)h Fm(e)1695 964 y Fe(o)1734
950 y Fm(F)13 b Fp(\()p Fm(n)p Fp(\))20 b(+)g Fm(eI)7
b Fp(\()p Fm(n)p Fp(\))21 b(+)f Fm(e)2409 964 y Fe(o)p
Fi(2)2483 950 y Fm(U)10 b Fp(\()p Fm(n)p Fp(\))p 3585
995 V 173 998 3414 4 v 171 1148 4 151 v 223 1103 a Fn(schmitz)29
b Fp(with)g(edge)i(basis)p 1254 1148 V 99 w Fm(sZ)7 b
Fp(\()p Fm(n)p Fp(\))19 b(+)h(\()p 1688 1054 43 4 v Fm(e)1731
1117 y Fe(r)1789 1103 y Fp(+)g Fm(e)1922 1117 y Fe(i)1951
1103 y Fp(\))p Fm(I)7 b Fp(\()p Fm(n)p Fp(\))21 b(+)p
2269 1054 V 19 w Fm(e)2312 1117 y Fe(r)2350 1103 y Fm(U)10
b Fp(\()p Fm(n)p Fp(\))20 b(+)g Fm(\033)s(F)13 b Fp(\()p
Fm(n)p Fp(\))p 3585 1148 4 151 v 173 1152 3414 4 v 171
1302 4 151 v 223 1257 a Fn(btc)p 1254 1302 V 922 w Fm(nZ)7
b Fp(\()p Fm(n)p Fp(\))19 b(+)h Fm(eF)13 b Fp(\()p Fm(n)p
Fp(\))21 b(+)f(\()p Fm(e)2092 1271 y Fe(i)p Fi(1)2176
1257 y Fp(+)g Fm(e)2309 1271 y Fe(o)p Fi(1)2383 1257
y Fp(\))p Fm(I)7 b Fp(\()p Fm(n)p Fp(\))21 b(+)f Fm(e)2744
1271 y Fe(o)p Fi(1)2818 1257 y Fm(U)10 b Fp(\()p Fm(n)p
Fp(\))20 b(+)g Fm(\034)p 3585 1302 V 173 1306 3414 4
v 171 1456 4 151 v 223 1411 a Fn(st)-6 b(a)n(ck)p 485
1411 31 4 v 35 w(tc)p 1254 1456 4 151 v 684 w Fm(sZ)7
b Fp(\()p Fm(n)p Fp(\))19 b(+)p 1653 1362 43 4 v 20 w
Fm(e)q(F)13 b Fp(\()p Fm(n)p Fp(\))20 b(+)p 2003 1362
V 20 w Fm(e)2045 1425 y Fe(r)2083 1411 y Fp(\()p Fm(I)7
b Fp(\()p Fm(n)p Fp(\))21 b(+)f Fm(U)10 b Fp(\()p Fm(n)p
Fp(\)\))21 b(+)f Fm(\026)p 3585 1456 4 151 v 173 1459
3414 4 v 215 1728 a Fq(T)-9 b(able)38 b(3.1)p Fu(:)43
b(A)33 b(summary)f(of)g(the)h(implemen)m(tation)c(indep)s(enden)m(t)34
b(w)m(orst)f(case)h(times.)66 2033 y Fm(I)7 b Fp(\()p
Fm(n)p Fp(\))118 b(The)30 b(maxim)m(um)f(time)h(of)h(inserting)d(an)j
(elemen)m(t)g(in)m(to)f(a)h(set)g(of)f(at)h(most)g Fm(n)f
Fp(elemen)m(ts.)41 2177 y Fm(U)10 b Fp(\()p Fm(n)p Fp(\))118
b(The)30 b(maxim)m(um)f(time)h(of)h(unioning)d(of)i(t)m(w)m(o)i(sets)f
(of)f(at)h(most)g Fm(n)f Fp(elemen)m(ts.)30 2426 y Fu(As)45
b(w)m(e)h(see,)j(the)c(w)m(orst-case)h(times)e(of)h Fq(simple)p
1921 2426 34 4 v 39 w(tc)o Fu(,)j Fq(eks)p Fu(,)f(and)e
Fq(eber)-7 b(t)44 b Fu(are)h(similar.)77 b(The)45 b(only)-116
2559 y(di\013erence)35 b(is)e(in)h(the)g(n)m(um)m(b)s(er)h(of)f(union)f
(op)s(erations.)48 b(Ob)m(viously)-8 b(,)34 b Fq(simple)p
2765 2559 V 39 w(tc)g Fu(do)s(es)h(at)f(least)f(as)i(man)m(y)-116
2693 y(unions)40 b(as)g Fq(eks)g Fu(and)h Fq(eber)-7
b(t)o Fu(.)66 b(In)41 b(a)f(graph,)i(exactly)f(one)g(in)m(tracomp)s
(onen)m(t)e(tree)i(edge)g(leads)f(to)g(eac)m(h)-116 2826
y(nonro)s(ot)29 b(v)m(ertex.)44 b(Th)m(us,)32 b Fs(n)16
b Fh(\000)g Fs(s)29 b Fu(=)e Fs(e)1241 2841 y Fe(it)1295
2826 y Fu(.)43 b(Since)30 b Fs(e)1662 2841 y Fe(oct)1784
2826 y Fh(\024)e Fs(e)1934 2841 y Fe(o)1972 2826 y Fu(,)j
Fq(eber)-7 b(t)29 b Fu(do)s(es)h(alw)m(a)m(ys)g(at)f(most)g(as)h(man)m
(y)g(unions)-116 2960 y(as)38 b Fq(eks)p Fu(.)61 b Fq(gdftc)39
b Fu(di\013ers)f(from)f Fq(eber)-7 b(t)38 b Fu(only)g(b)m(y)h(doing)f
(few)m(er)i(insertion)d(op)s(erations.)61 b(Note)38 b(that)g(the)-116
3094 y(term)25 b Fs(e)17 b Fu(log)g Fs(n)26 b Fu(is)f(presen)m(t)j(in)d
(the)i(w)m(orst-case)g(time)e(of)g Fq(simple)p 2195 3094
V 39 w(tc)h Fu(with)g(A)-11 b(VL-trees,)28 b(but)f(it)e(is)g(dominated)
-116 3227 y(b)m(y)30 b(the)g(term)f Fs(ne)p Fu(.)43 b(Similarly)-8
b(,)26 b(the)k(term)f(\()p Fs(e)1493 3242 y Fe(oct)1603
3227 y Fu(+)16 b Fs(e)1740 3242 y Fe(it)1793 3227 y Fu(\))h(log)g
Fs(n)29 b Fu(is)g(presen)m(t)i(in)e(the)h(w)m(orst-case)h(time)d(of)h
Fq(gdftc)-116 3361 y Fu(with)j(A)-11 b(VL-trees,)34 b(but)e(is)g
(dominated)g(b)m(y)h(the)g(term)f Fs(n)p Fu(\()p Fs(e)2032
3376 y Fe(oct)2149 3361 y Fu(+)22 b Fs(e)2292 3376 y
Fe(it)2346 3361 y Fu(\).)p 219 3575 3321 4 v 217 3725
4 151 v 269 3680 a Fp(Algorithm)p 870 3725 V 245 w(Bit)30
b(v)m(ector)i Fm(O)s Fp(\(\))p 1677 3725 V 237 w(A)-10
b(VL-tree)31 b Fm(O)s Fp(\(\))p 2658 3725 V 443 w(List&bit)e(v)m(ector)
j Fm(O)s Fp(\(\))p 3539 3725 V 219 3729 3321 4 v 217
3879 4 151 v 269 3834 a Fn(simple)p 561 3834 31 4 v 35
w(tc)p 870 3879 4 151 v 224 w Fm(ne)20 b Fp(+)g Fm(n)1185
3801 y Fi(2)p 1677 3879 V 1729 3834 a Fm(ne)p 2658 3879
V 883 w(ne)h Fp(+)e Fm(n)2972 3801 y Fi(2)p 3539 3879
V 219 3882 3321 4 v 217 4033 4 151 v 269 3988 a Fn(eks)p
870 4033 V 502 w Fm(ne)1019 4002 y Fe(o)1077 3988 y Fp(+)h
Fm(n)1223 3955 y Fi(2)p 1677 4033 V 1729 3988 a Fm(n)p
Fp(\()p Fm(e)1861 4002 y Fe(o)1920 3988 y Fp(+)f Fm(n)h
Fk(\000)g Fm(s)p Fp(\))g(+)g Fm(e)15 b Fp(log)i Fm(n)p
2658 4033 V 99 w(ne)2806 4002 y Fe(o)2865 3988 y Fp(+)j
Fm(n)3011 3955 y Fi(2)p 3539 4033 V 219 4036 3321 4 v
217 4187 4 151 v 269 4141 a Fn(eber)-6 b(t)p 870 4187
V 395 w Fm(n)p Fp(\()p Fm(e)1054 4155 y Fe(oct)1169 4141
y Fp(+)19 b Fm(e)1301 4155 y Fe(it)1355 4141 y Fp(\))i(+)f
Fm(n)1557 4108 y Fi(2)p 1677 4187 V 1729 4141 a Fm(n)p
Fp(\()p Fm(e)1861 4155 y Fe(oct)1976 4141 y Fp(+)g Fm(e)2109
4155 y Fe(it)2163 4141 y Fp(\))g(+)g Fm(e)15 b Fp(log)i
Fm(n)p 2658 4187 V 155 w(n)p Fp(\()p Fm(e)2841 4155 y
Fe(oct)2956 4141 y Fp(+)j Fm(e)3089 4155 y Fe(it)3143
4141 y Fp(\))h(+)f Fm(n)3345 4108 y Fi(2)p 3539 4187
V 219 4190 3321 4 v 217 4340 4 151 v 269 4295 a Fn(gdftc)p
870 4340 V 381 w Fm(n)p Fp(\()p Fm(e)1054 4309 y Fe(oct)1169
4295 y Fp(+)f Fm(e)1301 4309 y Fe(it)1355 4295 y Fp(\))i(+)f
Fm(n)1557 4262 y Fi(2)p 1677 4340 V 1729 4295 a Fm(n)p
Fp(\()p Fm(e)1861 4309 y Fe(oct)1976 4295 y Fp(+)g Fm(e)2109
4309 y Fe(it)2163 4295 y Fp(\))p 2658 4340 V 511 w Fm(n)p
Fp(\()p Fm(e)2841 4309 y Fe(oct)2956 4295 y Fp(+)g Fm(e)3089
4309 y Fe(it)3143 4295 y Fp(\))h(+)f Fm(n)3345 4262 y
Fi(2)p 3539 4340 V 219 4344 3321 4 v 217 4494 4 151 v
269 4449 a Fn(cr)p 384 4449 31 4 v 36 w(tc)p 870 4494
4 151 v 400 w Fm(n)p Fp(\()p Fm(e)1054 4463 y Fe(oct)p
Fi(1)1204 4449 y Fp(+)g Fm(n)1350 4463 y Fi(1)1389 4449
y Fp(\))g(+)g Fm(n)1590 4416 y Fi(2)p 1677 4494 V 1729
4449 a Fm(n)p Fp(\()p Fm(e)1861 4463 y Fe(oct)p Fi(1)2011
4449 y Fp(+)g Fm(n)2157 4463 y Fi(1)2196 4449 y Fp(\))p
2658 4494 V 478 w Fm(n)p Fp(\()p Fm(e)2841 4463 y Fe(oct)p
Fi(1)2992 4449 y Fp(+)f Fm(n)3137 4463 y Fi(1)3176 4449
y Fp(\))i(+)f Fm(n)3378 4416 y Fi(2)p 3539 4494 V 219
4497 3321 4 v 217 4648 4 151 v 269 4603 a Fn(purdom)p
870 4648 V 308 w Fm(n)p 977 4553 43 4 v(e)1019 4617 y
Fe(r)1077 4603 y Fp(+)g Fm(n)1223 4570 y Fi(2)p 1677
4648 4 151 v 1729 4603 a Fp({)p 2658 4648 V 935 w({)p
3539 4648 V 219 4651 3321 4 v 217 4801 4 151 v 269 4756
a Fn(munr)n(o)p 870 4801 V 362 w Fm(n)977 4723 y Fe(\013)p
1677 4801 V 1729 4756 a Fp({)p 2658 4801 V 935 w({)p
3539 4801 V 219 4805 3321 4 v 217 4955 4 151 v 269 4910
a Fn(schmitz)p 870 4955 V 306 w Fm(ne)1019 4924 y Fe(o)p
Fi(2)1112 4910 y Fp(+)g Fm(ns)p 1677 4955 V 428 w(ne)1826
4924 y Fe(o)p Fi(2)1919 4910 y Fp(+)g Fm(e)15 b Fp(log)i
Fm(n)p 2658 4955 V 454 w(ne)2806 4924 y Fe(o)p Fi(2)2900
4910 y Fp(+)p 2991 4861 43 4 v 20 w Fm(e)3033 4877 y
Fi(+)p 3539 4955 4 151 v 219 4958 3321 4 v 217 5109 4
151 v 269 5064 a Fn(schmitz)29 b Fp(with)p 870 5109 V
99 w Fm(n)p 977 5015 43 4 v(e)1019 5078 y Fe(r)1077 5064
y Fp(+)20 b Fm(ns)f Fp(+)h Fm(\033)p 1677 5109 4 151
v 301 w(n)p 1784 5015 43 4 v(e)1826 5078 y Fe(r)1884
5064 y Fp(+)g(\()p 2010 5015 V Fm(e)2052 5078 y Fe(r)2111
5064 y Fp(+)g Fm(e)2244 5078 y Fe(i)2272 5064 y Fp(\))15
b(log)i Fm(n)p 2658 5109 4 151 v 199 w(n)p 2764 5015
43 4 v(e)2806 5078 y Fe(r)2865 5064 y Fp(+)p 2955 5015
V 19 w Fm(e)2998 5031 y Fi(+)3077 5064 y Fp(+)j Fm(\033)p
3539 5109 4 151 v 217 5259 V 269 5214 a Fp(edge)31 b(basis)p
870 5259 V 1677 5259 V 1079 w(+)20 b Fm(\033)e Fp(log)f
Fm(n)p 2658 5259 V 3539 5259 V 219 5263 3321 4 v 217
5413 4 151 v 269 5368 a Fn(btc)p 870 5413 V 492 w Fm(ne)1019
5382 y Fe(o)p Fi(1)1112 5368 y Fp(+)j Fm(n)1258 5335
y Fi(2)1318 5368 y Fp(+)f Fm(\034)p 1677 5413 V 281 w(ne)1826
5382 y Fe(o)p Fi(1)1919 5368 y Fp(+)h Fm(e)15 b Fp(log)i
Fm(n)j Fp(+)g Fm(\034)p 2658 5413 V 303 w(ne)2806 5382
y Fe(o)p Fi(1)2900 5368 y Fp(+)g Fm(n)3046 5335 y Fi(2)3105
5368 y Fp(+)g Fm(\034)p 3539 5413 V 219 5416 3321 4 v
217 5567 4 151 v 269 5522 a Fn(st)-6 b(a)n(ck)p 531 5522
31 4 v 35 w(tc)p 870 5567 4 151 v 254 w Fm(n)p 977 5472
43 4 v(e)1019 5536 y Fe(r)1077 5522 y Fp(+)20 b Fm(ns)f
Fp(+)h Fm(\026)p 1677 5567 4 151 v 298 w(n)p 1784 5472
43 4 v(e)1826 5536 y Fe(r)1884 5522 y Fp(+)p 1975 5472
V 20 w Fm(e)15 b Fp(log)i Fm(n)j Fp(+)g Fm(\026)p 2658
5567 4 151 v 323 w(n)p 2764 5472 43 4 v(e)2806 5536 y
Fe(r)2865 5522 y Fp(+)p 2955 5472 V 19 w Fm(e)2998 5489
y Fi(+)3077 5522 y Fp(+)g Fm(\026)p 3539 5567 4 151 v
219 5570 3321 4 v 68 5838 a Fq(T)-9 b(able)38 b(3.2)p
Fu(:)43 b(A)33 b(summary)f(of)g(the)h(smallest)e(implemen)m(tation)e
(dep)s(enden)m(t)35 b(w)m(orst)e(case)h(times.)p eop
69 34 bop 3778 -294 a Fu(69)30 18 y(The)43 b(n)m(um)m(b)s(er)g(of)e
(unions)h(in)g Fq(cr)p 1294 18 34 4 v 39 w(tc)g Fu(is)g
Fs(n)1652 33 y Fi(1)1720 18 y Fu(+)29 b Fs(e)1870 33
y Fe(oct)p Fi(1)2000 18 y Fu(.)72 b(Since)42 b Fs(n)2421
33 y Fi(1)2505 18 y Fh(\024)i Fs(n)29 b Fh(\000)g Fs(s)44
b Fu(=)g Fs(e)3074 33 y Fe(it)3170 18 y Fu(and)e Fs(e)3414
33 y Fe(oct)p Fi(1)3588 18 y Fh(\024)i Fs(e)3754 33 y
Fe(oct)3849 18 y Fu(,)-116 152 y Fq(cr)p 10 152 V 39
w(tc)37 b Fu(do)s(es)g(at)f(most)g(as)h(man)m(y)g(unions)g(as)g
Fq(gdftc)g Fu(and)f Fq(eber)-7 b(t)p Fu(,)37 b(and)g(usually)f(few)m
(er.)57 b Fq(cr)p 3455 152 V 40 w(tc)36 b Fu(needs)-116
286 y Fs(e)-71 301 y Fe(oct)52 286 y Fu(mem)m(b)s(ership)28
b(tests)i(to)f(reduce)h(the)g(n)m(um)m(b)s(er)f(of)f(unions.)42
b(The)30 b(n)m(um)m(b)s(er)g(of)e(insertions)g(in)h Fq(cr)p
3540 286 V 39 w(tc)g Fu(and)-116 419 y(in)i Fq(gdftc)h
Fu(cannot,)h(in)e(general,)h(b)s(e)g(compared,)h(since)f(w)m(e)h(do)f
(not)g(kno)m(w)i(whic)m(h)e(one)h(is)e(greater,)i Fs(s)3655
434 y Fe(cy)r(c)3789 419 y Fu(or)-116 553 y Fs(e)-71
568 y Fe(it)-17 553 y Fu(.)60 b(The)39 b(b)s(est)f(w)m(orst-case)i(b)s
(ound)e(of)g Fq(cr)p 1515 553 V 39 w(tc)g Fu(is)g Fs(O)s
Fu(\()p Fs(n)p Fu(\()p Fs(e)2064 568 y Fe(oct)p Fi(1)2219
553 y Fu(+)25 b Fs(n)2378 568 y Fi(1)2418 553 y Fu(\)\))38
b(and)g(is)g(reac)m(hed)h(with)f(A)-11 b(VL-trees.)-116
686 y(This)28 b(is)g(b)s(etter)h(than)f(the)h(b)s(est)g(w)m(orst-case)h
(b)s(ound)e(of)g Fq(gdftc)p Fu(,)i(namely)d Fs(O)s Fu(\()p
Fs(n)p Fu(\()p Fs(e)2888 701 y Fe(oct)2996 686 y Fu(+)14
b Fs(e)3131 701 y Fe(it)3184 686 y Fu(\)\).)42 b(Th)m(us,)31
b Fq(cr)p 3726 686 V 39 w(tc)-116 820 y Fu(has)45 b(the)g(b)s(est)h(w)m
(orst-case)g(b)s(ound)f(of)g(those)g(algorithms)d(that)j(compute)g(the)
g(successor)i(sets)g(during)-116 954 y(the)34 b(detection)h(of)e(the)i
(strong)f(comp)s(onen)m(ts.)49 b(Remem)m(b)s(er)34 b(also)f(that)h
Fq(cr)p 2667 954 V 39 w(tc)g Fu(constructs)i(the)e(successor)-116
1087 y(sets)h(from)e(strong)h(comp)s(onen)m(ts)h(instead)f(of)f(v)m
(ertices.)49 b(Therefore,)36 b(the)f(successor)h(sets)f(constructed)h
(b)m(y)-116 1221 y Fq(cr)p 10 1221 V 39 w(tc)k Fu(are)g(in)f(practice)h
(m)m(uc)m(h)h(smaller)c(and)j(can)h(b)s(e)f(constructed)h(m)m(uc)m(h)g
(faster)f(than)g(the)g(successor)-116 1355 y(sets)34
b(constructed)g(b)m(y)f Fq(eks)p Fu(,)f Fq(eber)-7 b(t)p
Fu(,)32 b(and)h Fq(gdftc)p Fu(.)30 1519 y(Examine)c(no)m(w)h(the)h(w)m
(orst-case)f(times)f(of)g(the)h(algorithms)d(that)j(construct)g(the)g
(successor)i(sets)f(after)-116 1653 y(the)i(comp)s(onen)m(ts)g(are)g
(detected.)46 b(Note)33 b(that)g(no)g(implemen)m(tation)d(indep)s
(enden)m(t)k(w)m(orst-case)g(times)e(are)-116 1786 y(presen)m(ted)h
(for)d Fq(purdom)h Fu(and)g Fq(munr)n(o)q Fu(,)g(since)g(the)g
(algorithms)d(dep)s(end)k(on)f(the)g(underlying)f(bit)g(matrix)-116
1920 y(data)f(structure.)44 b(As)30 b(w)m(e)h(p)s(oin)m(ted)e(out,)h
(when)h(the)f(input)g(graph)f(is)g(acyclic)g(and)h(dense,)i
Fq(munr)n(o)e Fu(has)g(the)-116 2054 y(b)s(est)k(w)m(orst-case)g(b)s
(ound)g(of)f(all)e(transitiv)m(e)i(closure)h(algorithms,)d(but)i(in)g
(a)g(wide)g(class)h(of)f(input)g(graphs)-116 2187 y(other)f(algorithms)
e(ha)m(v)m(e)k(b)s(etter)f(w)m(orst-case)h(b)s(ounds.)30
2352 y Fq(btc)h Fu(and)h Fq(schmitz)g Fu(need)h(more)e(unions)h(than)f
(the)i(other)f(algorithms)d(of)i(this)g(group.)53 b(Whic)m(h)37
b(one)-116 2485 y(of)32 b(these)i(t)m(w)m(o)f(algorithms)d(needs)k
(more)e(unions)g(dep)s(ends)i(on)f(the)g(input.)30 2650
y(Sc)m(hmitz's)42 b(v)-5 b(arian)m(t)41 b(algorithm)e(that)i(uses)j
(the)e(edge)h(basis)e(and)h(our)g(algorithm)d Fq(st)-7
b(a)n(ck)p 3486 2650 V 39 w(tc)42 b Fu(b)s(oth)-116 2783
y(need)p 110 2731 46 4 v 32 w Fs(e)156 2798 y Fe(r)225
2783 y Fu(unions.)h Fq(purdom)33 b Fu(e\013ectiv)m(ely)f(do)s(es)g(the)
g(same)g(n)m(um)m(b)s(er)g(of)f(unions,)h(although)e(the)i(unions)g
(are)-116 2917 y(op)s(en)e(co)s(ded)h(in)m(to)e(bit)g(matrix)g(op)s
(erations.)42 b(Eac)m(h)31 b(of)f(these)h(algorithms)c(do)s(es)k(non)m
(trivial)d(computations)-116 3051 y(to)33 b(a)m(v)m(oid)h(the)g
(unnecessary)j(unions.)47 b Fq(purdom)35 b Fu(explicitly)d(builds)h
(the)h(condensation)h(graph)e(and)h(sorts)-116 3184 y(it)29
b(top)s(ologically)-8 b(,)26 b(Sc)m(hmitz's)k(v)-5 b(arian)m(t)29
b(algorithm)e(computes)k(the)f(edge)h(basis,)f(and)h
Fq(st)-7 b(a)n(ck)p 3329 3184 34 4 v 39 w(tc)30 b Fu(sorts)g(the)-116
3318 y(adjacen)m(t)h(comp)s(onen)m(ts)h(on)f Fr(cstack)f
Fu(b)s(efore)h(constructing)g(a)g(successor)i(set.)44
b(Building)28 b(the)k(condensation)-116 3452 y(graph)44
b(tak)m(es)h(\002\()p Fs(n)605 3415 y Fi(2)645 3452 y
Fu(\))f(time)f(in)h Fq(purdom)p Fu(.)79 b(Sorting)43
b(the)i(adjacen)m(t)g(comp)s(onen)m(ts)f(in)g Fq(st)-7
b(a)n(ck)p 3464 3452 V 40 w(tc)44 b Fu(tak)m(es)-116
3585 y Fs(O)s Fu(\(min)n(\()p Fs(ns;)17 b(e)393 3600
y Fe(oct)503 3585 y Fu(log)g Fs(n)p Fu(\))33 b(time.)45
b(Min)o(\()p Fs(ns;)17 b(e)1439 3600 y Fe(oct)1550 3585
y Fu(log)g Fs(n)p Fu(\))33 b(is)g(nev)m(er)i(greater)e(than)g
Fs(n)2799 3549 y Fi(2)2872 3585 y Fu(and)g(in)g(an)g(in\014nite)f(set)i
(of)-116 3719 y(graphs)k(it)g(is)f(negligible)f(compared)i(to)g
Fs(n)1484 3683 y Fi(2)1523 3719 y Fu(.)61 b(F)-8 b(urther,)40
b(in)d(an)i(in\014nite)e(set)i(of)f(graphs)g Fs(n)p 3249
3666 46 4 v(e)3295 3734 y Fe(r)3371 3719 y Fu(is)g(negligible)-116
3852 y(compared)32 b(to)g Fs(n)505 3816 y Fi(2)545 3852
y Fu(.)44 b(Th)m(us,)34 b Fq(st)-7 b(a)n(ck)p 1176 3852
34 4 v 39 w(tc)33 b Fu(has)g(a)f(b)s(etter)h(w)m(orst-case)h(b)s(ound)e
(than)h Fq(purdom)q Fu(.)30 4017 y(Computing)f(the)h(edge)g(basis)f(in)
g(Sc)m(hmitz's)h(v)-5 b(arian)m(t)31 b(algorithm)f(tak)m(es)k(in)d(the)
i(w)m(orst)h(case)-116 4151 y Fs(O)s Fu(\()0 4084 y Fd(P)87
4171 y Fe(C)5 b Ff(2)p Fi(\005)262 4084 y Fd(P)350 4171
y Fe(v)r Ff(2)p Fe(C)509 4151 y Fr(Outde)-5 b(g)p Fu(\()p
Fs(v)t Fu(\))p Fr(Outde)g(g)p Fu(\()p Fs(C)7 b Fu(\)\))28
b(time.)41 b(This)29 b(sum)g(cannot)g(b)s(e)g(expressed)j(in)c(a)h
(closed)g(form,)g(but)-116 4284 y(the)i(follo)m(wing)d(example)i(sho)m
(ws)i(that)f(the)g(edge)g(basis)g(computation)e(ma)m(y)i(tak)m(e)g
(\012\()p Fs(n)3104 4248 y Fi(3)3144 4284 y Fu(\))g(time)e(ev)m(en)k
(when)-116 4418 y(the)g(unions)f(tak)m(e)i(only)e Fs(O)s
Fu(\()p Fs(n)961 4382 y Fi(2)1000 4418 y Fu(\))g(time.)-116
4789 y Fj(Example)43 b(3.9.)38 b Fu(Consider)g(a)g(complete)f(D)m(A)m
(G)h Fs(G)f Fu(=)g(\()p Fs(V)5 b(;)17 b(E)6 b Fu(\))37
b(of)h Fs(n)g Fu(v)m(ertices)h(1,2,)g(.)16 b(.)g(.)g(,)41
b Fs(n)d Fu(suc)m(h)i(that)d(for)-116 4922 y(eac)m(h)30
b Fs(i)f Fu(and)h Fs(j)6 b Fu(,)29 b(1)f Fh(\024)g Fs(i;)17
b(j)34 b Fh(\024)28 b Fs(n)p Fu(,)i Fs(G)f Fu(has)h(an)f(edge)g(\()p
Fs(i;)17 b(j)6 b Fu(\))29 b(i\013)g Fs(i)e(<)h(j)6 b
Fu(.)42 b(Th)m(us,)32 b Fs(e)c Fu(=)f Fs(n)p Fu(\()p
Fs(n)15 b Fh(\000)g Fu(1\))p Fs(=)p Fu(2.)43 b(Since)29
b(the)h(graph)-116 5056 y(is)c(acyclic,)i(the)f(set)h(of)e(strong)h
(comp)s(onen)m(ts)g(\005)h(=)g Fh(ff)p Fs(i)p Fh(g)f(j)g
Fs(i)h Fh(2)g Fs(V)22 b Fh(g)k Fu(and)h Fr(Outde)-5 b(g)p
Fu(\()p Fs(i)p Fu(\))28 b(=)g Fr(Outde)-5 b(g)p Fu(\()p
Fh(f)p Fs(i)p Fh(g)p Fu(\).)41 b(When)-116 5190 y(Sc)m(hmitz's)32
b(v)-5 b(arian)m(t)31 b(algorithm)e(is)i(constructing)h(the)h(edge)f
(basis)g(for)g(a)f(comp)s(onen)m(t)h Fh(f)p Fs(i)p Fh(g)p
Fu(,)g(it)f(scans)i(again)-116 5323 y(all)g(edges)j(lea)m(ving)f(v)m
(ertex)i Fs(i)p Fu(.)51 b(Assume)36 b(that)f(the)h(adjacency)h(lists)d
(are)h(in)g(a)g(rev)m(erse)i(top)s(ological)32 b(order.)-116
5457 y(Th)m(us,)47 b(whenev)m(er)f(the)d(algorithm)d(is)i(c)m(hec)m
(king)j(an)d(edge)i(\()p Fs(i;)17 b(j)6 b Fu(\),)45 b
Fs(j)k Fu(is)43 b(not)g(in)f(the)h(queue)i(and)e(neither)-116
5591 y(is)c(there)h(an)m(y)g(v)m(ertex)i Fs(k)g Fu(suc)m(h)f(that)f
Fs(j)45 b Fu(is)39 b(in)g Fr(Suc)-5 b(c)p Fu(\()p Fs(k)s
Fu(\).)64 b(Hence)41 b(the)f(algorithm)d(has)i(to)h(scan)g(the)g(whole)
-116 5724 y(queue)c(and)e(after)h(that)f(insert)g(v)m(ertex)i
Fs(j)41 b Fu(in)33 b(fron)m(t)i(of)f(the)h(queue.)50
b(The)36 b(head)f(of)f(eac)m(h)h(edge)g(lea)m(ving)f
Fs(i)g Fu(is)-116 5858 y(inserted)29 b(in)m(to)e(the)i(queue)h(this)e
(w)m(a)m(y)-8 b(.)43 b(The)30 b(n)m(um)m(b)s(er)f(of)f(queue)h(p)s
(ositions)f(that)g(ha)m(v)m(e)h(to)g(b)s(e)f(c)m(hec)m(k)m(ed)k(when)p
eop
70 35 bop -116 -294 a Fu(70)-116 18 y(constructing)33
b(the)g(queue)h(for)e(comp)s(onen)m(t)g Fh(f)p Fs(i)p
Fh(g)h Fu(is)128 336 y Fs(P)191 351 y Fe(i)246 336 y
Fu(=)350 228 y Fe(n)p Ff(\000)p Fe(i)p Ff(\000)p Fi(1)396
253 y Fd(X)400 438 y Fe(l)q Fi(=1)578 336 y Fs(l)d Fu(=)e(\()p
Fs(n)22 b Fh(\000)h Fs(i)p Fu(\)\(\()p Fs(n)f Fh(\000)h
Fs(i)p Fu(\))f Fh(\000)h Fu(1\))p Fs(=)p Fu(2)2011 b(\(3.1\))-116
648 y(The)33 b(total)e(n)m(um)m(b)s(er)i(of)f(queue)i(p)s(ositions)e(c)
m(hec)m(k)m(ed)j(during)d(the)h(computation)e(is)128
945 y Fs(P)191 960 y Fe(tot)307 945 y Fu(=)450 837 y
Fe(n)411 862 y Fd(X)414 1044 y Fe(i)p Fi(=1)531 945 y
Fu(\()p Fs(n)22 b Fh(\000)h Fs(i)p Fu(\)\(\()p Fs(n)f
Fh(\000)h Fs(i)p Fu(\))f Fh(\000)h Fu(1\))p Fs(=)p Fu(2)k(=)g
Fs(n)p Fu(\()p Fs(n)c Fh(\000)g Fu(1\)\()p Fs(n)f Fh(\000)g
Fu(2\))p Fs(=)p Fu(6)27 b(=)h(\012\()p Fs(n)2647 904
y Fi(3)2687 945 y Fu(\))950 b(\(3.2\))p -116 1192 77
4 v -116 1270 a Fs(G)-39 1285 y Fe(r)-1 1270 y Fu(,)32
b(the)h(transitiv)m(e)e(reduction)h(of)g(the)h(condensation)f(graph)g
(of)g Fs(G)g Fu(is)f(a)h(graph)g(of)g Fs(n)g Fu(v)m(ertices)i(and)e
Fs(n)21 b Fh(\000)h Fu(1)-116 1404 y(edges)43 b(\()p
Fs(i;)17 b(i)29 b Fu(+)f(1\),)44 b(1)g Fh(\024)g Fs(i)g(<)f(n)p
Fu(.)72 b(Computing)41 b(the)i(transitiv)m(e)e(closure)h(of)p
2756 1326 V 42 w Fs(G)2833 1419 y Fe(r)2913 1404 y Fu(requires)g
Fs(n)29 b Fh(\000)g Fu(1)42 b(unions,)-116 1537 y(one)35
b(p)s(er)h(eac)m(h)g(edge.)52 b(Assuming)34 b(that)h(the)h(union)f(of)f
(t)m(w)m(o)i(successor)i(sets)e(tak)m(es)h Fs(O)s Fu(\()p
Fs(n)p Fu(\))d(time,)h(the)g(total)-116 1671 y(time)i(for)h(the)h
(unions)g(is)f Fs(O)s Fu(\()p Fs(n)1035 1635 y Fi(2)1074
1671 y Fu(\).)61 b(Since)39 b(the)g(time)e(needed)j(for)e(sorting)g
(the)h(adjacen)m(t)g(comp)s(onen)m(ts)h(in)-116 1805
y Fq(st)-7 b(a)n(ck)p 170 1805 34 4 v 39 w(tc)42 b Fu(is)f
Fs(O)s Fu(\(min)n(\()p Fs(ns;)17 b(e)978 1820 y Fe(oct)1072
1805 y Fu(\)\),)44 b(whic)m(h)e(is)f Fs(O)s Fu(\()p Fs(n)1788
1768 y Fi(2)1827 1805 y Fu(\))g(in)g(this)g(example,)j
Fq(st)-7 b(a)n(ck)p 2935 1805 V 40 w(tc)41 b Fu(needs)i(only)e
Fs(O)s Fu(\()p Fs(n)3799 1768 y Fi(2)3838 1805 y Fu(\))-116
1938 y(time)30 b(to)h(compute)h(the)g(transitiv)m(e)f(closure)h(of)g
Fs(G)p Fu(,)f(whereas)j(Sc)m(hmitz's)d(v)-5 b(arian)m(t)31
b(algorithm)e(needs)k(\012\()p Fs(n)3798 1902 y Fi(3)3838
1938 y Fu(\))-116 2072 y(time.)p 187 2072 4 67 v 191
2009 59 4 v 191 2072 V 249 2072 4 67 v 30 2289 a(Our)24
b(conclusion)g(is)g(that)g Fq(st)-7 b(a)n(ck)p 1265 2289
34 4 v 40 w(tc)24 b Fu(has)h(a)f(b)s(etter)h(w)m(orst-case)h(b)s(ound)e
(than)h(the)f(previous)h(transitiv)m(e)-116 2422 y(closure)39
b(algorithms)d(that)j(are)g(based)h(on)f(strong)g(comp)s(onen)m(t)g
(detection)g(except)i Fq(munr)n(o)p Fu(,)g(whic)m(h)e(has)-116
2556 y(a)45 b(b)s(etter)i(w)m(orst-case)g(b)s(ound)f(with)f(dense)j
(inputs.)83 b(With)45 b(sparse)j(inputs)d Fq(st)-7 b(a)n(ck)p
3140 2556 V 40 w(tc)46 b Fu(has)g(a)f(b)s(etter)-116
2689 y(w)m(orst-case)37 b(b)s(ound.)55 b(Note)37 b(also)e(that)i
Fq(munr)n(o)f Fu(has)h(high)f(constan)m(t)h(costs.)56
b(In)37 b(Chapter)g(5,)g(w)m(e)g(presen)m(t)-116 2823
y(exp)s(erimen)m(tal)22 b(results)h(sho)m(wing)h(that)e
Fq(st)-7 b(a)n(ck)p 1607 2823 V 40 w(tc)23 b Fu(is)f(in)h(practice)g
(considerably)g(faster)g(than)g(the)g(previous)-116 2957
y(algorithms.)p eop end
userdict /end-hook known{end-hook}if
